popen与pclose
来源:互联网 发布:怎么在淘宝注册品牌 编辑:程序博客网 时间:2024/06/05 03:59
popen源码:
if ( (pid = fork()) == -1 ){
close(pfp[0]);
close(pfp[1]);
return NULL;
}
if ( pid > 0 )
{
if (close( pfp[child_end] ) == -1 )
return NULL;
return fdopen( pfp[parent_end] , mode);
}
在父进程中如果打开管道正确,则会与文件描述符一致的文件指针。
if ( close(pfp[parent_end]) == -1 )
exit(1);
if ( dup2(pfp[child_end], child_end) == -1 )
exit(1);
if ( close(pfp[child_end]) == -1 )
exit(1);
execl( "/bin/sh", "sh", "-c", command, NULL );
exit(1);
子进程则会调用execl函数执行shell命令,execl后面的exit(1)是在execl执行失败后才会执行,所以写的是exit(1),源码果真是写的精简却不简单那!!
pclose源码:
The code sample below illustrates how the pclose() function might be implemented on a system conforming to IEEE Std 1003.1-2001.
int pclose(FILE *stream)
{
{
}
#include<stdio.h>
void main()
{
FILE * fp;
char buffer[80];
fp=popen("/home/yxf/yang/qt/co_work/test.sh","r");
fgets(buffer,sizeof(buffer),fp);
printf("%s",buffer);
pclose(fp);
pclose(fp);
}
运行查看进程,出现[sh]进程,pclose后这个进程就被杀死。
所谓僵尸进程,应该和孤儿进程一同记忆。顾名思义,孤儿进程就是父进程已死,僵尸进程则是子进程已死,但是父进程依然运行。僵尸进程的危害是非常大的,因为父进程没有替子进程“收尸”,导致其在进程表(process table)中仍然占有一个位置(slot)。由于进程表资源是有限的,最终会影响系统性能,甚至是使系统瘫痪。孤儿进程则无需担心,因为孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
- popen与pclose
- apue--popen and pclose
- popen 和 pclose 函数
- popen pclose测试
- popen和pclose函数
- Linux中的popen-pclose
- popen和pclose函数
- popen和pclose函数
- linux popen和pclose
- popen和pclose
- popen()和pclose()
- popen和pclose
- popen+pclose 执行 shell 命令
- Linux popen和pclose函数
- 【进程通信】popen与pclose,创建一个管道连接到另一个进程中
- 基于管道的popen和pclose函数
- 基于管道的popen和pclose函数
- 基于管道的popen和pclose函数
- Search a 2D Matrix
- Windows下.vbs启动tomcat的bat示例
- Activity知识点总结
- android权重android:layout_weight
- 码农人生之程序员之路
- popen与pclose
- typedef
- Follow My Heart----大二下
- ADT下载地址(含各版本),最新ADT-23.0.6
- ZOJ-2060
- 。。。。。。。。。。
- SSH框架中的transaction即事务边界的问题
- ThinkPHP实例教程--CURD (增删改查)
- nsq系统架构