如何在Linux中使用popen函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>函数定义强>
# include & lt; stdio.h> FILE *, popen (const char * command ,, const char * type ); int pclose (FILE *流)
<强>函数说明强>
popen()函数通过创建一个管道,调用叉()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数.pclose()函数关闭标准I/O流,等待命令执行结束,然后返回壳的终止状态。如果壳不能被执行,则pclose()返回的终止状态与壳牌已执行退出一样。
类型参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和类型相应的只读或只写类型。如果类型是“r"则文件指针连接到命令的标准输出,如果类型是“w"则文件指针连接到命令的标准输入。
命令参数是一个指向以零结束的壳命令字符串的指针。这行命令将被传到bin/sh并使用- c标志,壳牌将执行这个命令。
popen()的返回值是个标准I/O流,必须由pclose来终止。前面提到这个流是单向的(只能用于读或写)。向这个流写内容相当于写入该命令的标准输入,命令的标准输出和调用popen()的进程相同,与之相反的,从流中读数据相当于读取命令的标准输出,命令的标准输入和调用popen()的进程相同。
<强>返回值强>
如果调用管道fork()或()失败,或者不能分配内存将返回零,否则返回标准的I/O流.popen()没有为内存分配失败设置errno值。如果调用管道fork()或()时出现错误,errno被设为相应的错误类型。如果类型参数不合法,errno将返回EINVAL。
<强>函数原型:强>
# include, # include 才能, #才能include ,,, int 才能;main (), ,{大敌; ,,,FILE * fp=零;, ,,,FILE * fh=零;, ,,,char 迷[128]={0};,,, ,,memset(迷,0,sizeof(浅黄色)),, ,,fp=popen (“ls  -l",“r");//将命令ls-l 同过管道读到fp ,,跳频=fopen (“shell.c",“w +“);//,创建一个可写的文件, ,,从文件中读(浅黄色,1127,《外交政策》);//将fp的数据流读到迷中, ,,写入文件(1127年迷,跳频);//将迷的数据写入跳频指向的文件中,,, ,,pclose (fp);, ,,文件关闭(跳频),,,, ,,return 0,,,, ,,}, ~
,运行结果:
[lol@localhost 实践]美元,ls popen popen.c  shell.c (lol@localhost 实践),美元cat shell.c total 12 -rwxrwxr-x只1,lol lol 5478年,May 24, 15:39 popen -rw-rw-r——只1,lol lol 473年,May 24, 15:39 popen.c -rw-rw-r——只1,lol lol , [lol@localhost 实践],美元vim popen.c (lol@localhost 实践)$
关于如何在Linux中使用popen函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。