1.8 从标准输入读命令并执行2


int execlp(const char *file, const char *arg, ...);
函数说明:
execlp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了。
返回值:
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。

proc/shell2.c

 1 #include "apue.h"
 2 #include <sys/wait.h>
 3 static void    sig_int(int);        /* our signal-catching function */
 4 int
 5 main(void)
 6 {
 7     char    buf[MAXLINE];    /* from apue.h */
 8     pid_t    pid;
 9     int        status;
10     if (signal(SIGINT, sig_int) == SIG_ERR)
11         err_sys("signal error");
12     printf("%% ");    /* print prompt (printf requires %% to print %) */
13     while (fgets(buf, MAXLINE, stdin) != NULL) {
14         if (buf[strlen(buf) - 1] == '\n')
15             buf[strlen(buf) - 1] = 0; /* replace newline with null */
16         if ((pid = fork()) < 0) {
17             err_sys("fork error");
18         } else if (pid == 0) {        /* child */
19             execlp(buf, buf, (char *)0);
20             err_ret("couldn't execute: %s", buf);
21             exit(127);
22         }
23         /* parent */
24         if ((pid = waitpid(pid, &status, 0)) < 0)
25             err_sys("waitpid error");
26         printf("%% ");
27     }
28     exit(0);
29 }
30 void
31 sig_int(int signo)
32 {
33     printf("interrupt\n%% ");
34 }

优质内容筛选与推荐>>
1、POJ3292
2、HttpSessionListener进行在线人数统计
3、ERP程序开发中遇到的六种错误
4、https://stackoverflow.com/questions/51751426/failed-to-run-the-da-platform-trial-vm
5、80386的分段机制、分页机制和物理地址的形成


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn