UNIX环境高级编程 1_7 从标准输入读命令并执行

源码

#include"apue.h"
#include<sys/wait.h>

int main(void)
{
    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("frok error");
        }   
        else if(pid == 0)
        {   
            execlp(buf,buf,(char *)0);
            err_ret("couldn't execute: %s',buf");
            exit(127);
        }   

        if((pid == waitpid(pid,&status,0)) < 0)
        {   
            err_sys("waitpid error");
        }   
        printf("%% ");
    }   
    exit(0);
}

execlp 函数

 头文件: #include<unistd.h>
原型: int execlp(const char *file , const char* arg,... (char*)0);
“该函数从 PATH 变量中所指的目录中查找符合参数 file 的文件名,找到后便执行该文件,然后依次将第二个以后的参数当作该文件的 argv[0],argv[1]..., 最后一个参数必须用空指针 NULL 做结束。”

将 fgets 输入的字符串最后一个字符替换为 null,
使用 fork 创建一个新进程,新进程是调用进程的一个副本,调用进程为父进程,新进程为子进程,
fork 创建进程时,被调用一次,但是会返回两次
对父进程返回新的子进程 ID
对子进程返回 0
子进程中,调用 execlp 执行从标准输入读入的命令,用新的程序文件替换了子进程原先执行的程序文件。
子进程调用 execlp 执行新的程序文件,而父进程希望等待子进程终止,通过调用 waitpid 来实现的,其参数指定要等待的进程 ,pid 参数是子进程的 ID, waitpid 函数返回子进程的终止状态

waitpid 函数

头文件: #include<sys/types.h>  #include<sys/wait.h>

原型: pid_t waitpid(pid_t pid, int*status, int options);

pid > 0 : 只等待 进程 ID 等于 pid 子进程,不管其他多少子进程退出,只要指定的子进程还没结束,就一直等待下去
pid = -1 : 等待任何一个子进程退出,没有任何限制
pid = 0 : 等待同一个进程组的任何子进程,如果子进程已经加入了别的进程组,waitpid 不会对它做任何理睬
pid < -1 : 等待一个指定进程组的任何子进程,这个进程组的 ID 等于 pid 的绝对值

status : 如果非空,则终止进程的终止状态就存放在 status 所指向的单元,如果是一个空指针,则表示父进程不关心子进程的终止状态。

其他参数还不太清楚,有知道的大佬可以指点一下,谢谢。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《LinuxUnix Shell编程指南》是一本比较经典的技术书籍,其内容涵盖了LinuxUnix系统下的Shell编程。Shell是一种命令行解释器,它能够让用户通过输入命令来与操作系统进行交互。 该书的主要内容包括介绍了Shell编程的基本概念、语法、常用命令和技巧。通过讲解Shell的语法和基本命令者可以提高自己 Shell 编程的能力,并学会如何编写脚本来完成一些自动化的操作。此外,书中还介绍了一些高级的 Shell 编程技巧,例如使用正则表达式、函数编程、流程控制等。 由于LinuxUnix系统广泛应用于服务器和计算机集群等领域,因此Shell编程技能也成为了很多IT从业者必备的技能之一。掌握Shell编程不仅可以提高工作效率,还能提高对系统的了解和理解,对于系统管理员、开发人员和软件测试人员等IT从业者来说都是非常重要的。 总之,《LinuxUnix Shell编程指南》对于想要进一步学习LinuxUnix系统、提高Shell编程技能的者来说,是一本非常有价值的技术书籍。 ### 回答2: LinuxUnix Shell编程指南是一本非常著名的书籍,主要介绍了Shell编程的基础知识和实际应用技巧。Shell是LinuxUnix系统中的一种命令行解释器,也是一种编程语言,它可以通过脚本编写来自动化执行一些常用的任务。 本书的作者是Shih-Wei Yuan和Mark G. Sobell,共有25章,从介绍Shell的概念和历史开始,详细阐述Shell编程的语法、变量、流程控制、函数、调试等方面的知识。 其中,重点涵盖了Shell脚本的结构和用途,Shell中的字符串操作和正则表达式,Shell的内建命令和外部命令的使用,以及Shell如何处理变量和环境。 此外,该书还介绍了一些实际应用案例,例如Shell脚本编写的服务监控、日志分析和一些常用的工具应用等方面。这些例子丰富了者的经验和实践能力。 总之,LinuxUnix Shell编程指南是一本深入浅出、通俗易懂的书籍,对Shell编程感兴趣的者可以通过学习此书来快速上手,提高自己的工作效率。无论是在日常的运维管理、软件开发还是数据处理等方面,Shell都是一种非常强大的工具,能够为用户带来很多便利。 ### 回答3: LinuxUnix Shell编程指南是一本经典的编程入门书籍,通过简单易懂的方式介绍了Shell脚本语言的基础知识以及常用的编程技巧。本书内容涵盖Shell基本语法、变量、流程控制、函数、正则表达式等方面,深入浅出地带领者进入Shell编程的世界。 Shell编程Unix/Linux系统中有着极其重要的应用,通过编写Shell程序可以轻松地完成常规的文本文件处理、系统管理及自动化化脚本等任务,提高工作效率,减少人为错误。本书通过大量的实例演示Shell编程的各种应用场景,让者感受到编程的乐趣。 构造复杂的Shell程序需要掌握逻辑和算法,本书深入理解了各种算法和数据结构,并详细解释了如何使用Shell进行实现。此以外,本书通过对Shell开发环境、调试工具以及面向对象编程等方面的阐述,让者通过本书学习到Shell开发的全过程,并顺利地实现编程目标。 总之,本书是一本适合初学者入门的Shell编程指南,也是一本深入学习Shell编程的经验分享之作。如果您是一名初学Shell编程的开发者或管理员,本书将是您不可错过的好书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值