您的位置:首页 > 产品设计 > UI/UE

《APUE》 第一章 图1-7 程序代码中execlp()部分解析

2015-07-10 11:24 513 查看
#include "apue.h"

#include <sys/wait.h>

int main()

{

char buf[MAXLINE];

pid_t pid;

int status;

printf("%% ");

while (fgets(buf, MAXLINE, stdin) != NULL)

{

if (buf[strlen(buf) - 1] == '\n')

{

buf[strlen(buf) - 1] = 0; }

if ((pid = fork()) < 0) {

err_sys("fork error!");

}

else if (pid == 0)

{

execlp(buf, buf, (char *)0);

err_ret("can't execute: %s", buf); //如果execlp函数成功,这个好像不会执行啊

exit(127);

}

if ((pid = waitpid(pid, &status, 0)) < 0)

{

err_sys("waitpid error!");

}

printf("%% ");

}

exit(0);

}execlp()函数说明:在子进程中,调用execlp以执行从标准输入读入的命令。这就用新的程序文件替换了子进程原先执行的程序文件。execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: