Linux里的fork,popen,system函数

11 篇文章 0 订阅

今天介绍一下Linux里fork,popen,system三个函数:

1.fork函数

fork函数是通过复制父进程来创建子进程,父子进程代码共享数据独有,这是一种分时拷贝技术,相对于vfork函数来说有较大的改进之处,返回值是来分流父子进程,对于父进程返回的是子进程的pid>0,对于子进程,返回的是0。
在这里插入图片描述
从图中可以看到它是一个系统调用函数

2.system函数

system函数可以看作是fork+execl+waitpid。当system接收的命令为NULL时返回值只有0和1两种,返回1表明系统的命令处理程序即/bin/sh是可用的,相反则返回0;否则fork出一个子进程,父进程则会使用waitpid一直等待子进程退出,子进程则会调用execl来启动一个程序代替自己,execl("/bin/sh",“sh”,"-c",cmdstring,(char*)0)是调用shell,这个shell路径是/bin/sh,后面的字符串都是参数,然后子进程就变成一个shell进程,这个shell的参数是cmdstring,就是system接受的参数。
在这里插入图片描述
从图中可以看到这是一个库函数

3.popen函数

popen函数用创建管道的方式启动一个进程,并调用shell,因为管道被定义成单向的,所以type参数只能定义成只读或只写,不能两者同时进行,结果流也相应的是只读或只写,command参数是一个字符串指针,指向一个以null结束符结尾的字符串,这个字符串也包含一个shell命令,这个命令被送到/bin/sh以-c参数执行,即由shell来执行,type参数也是一个指向以null结束符结尾的字符串的指针,这个字符串必须是’r’或者’w’来指明是读还是写。
popen函数的返回值是一个普通的标准I/O流,它只能用pclose函数来关闭。
**返回值:**若成功则返回文件指针,否则返回NULL,错误原因存于errno中。
在这里插入图片描述
从图中可以看到它也是一个库函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值