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

本文介绍了一个简单的C程序,该程序通过execlp函数在子进程中执行从标准输入读取的命令。文章详细解释了如何使用execlp函数替换子进程的执行代码,并讨论了与fork、exec和wait系统调用相关的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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()后边的代码也就不会执行了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值