菜单

Linux中popen函数的法力小结

2019年5月10日 - 皇家赌场系统

轻松易行说一下popen()函数

函数定义

#include <stdio.h>
FILE * popen(const char *command , const char *type );
int pclose(FILE *stream);

函数表达

  popen()函数通过创立三个管道,调用fork()产生一个子历程,试行三个shell以运转命令来拉开1个进程。那几个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令试行实现,然后回到shell的告一段落情况。假使shell不能够被施行,则pclose()再次来到的终止情状与shell已施行exit同样。

  type参数只好是读也许写中的一种,得到的再次回到值(标准I/O流)也是有所和type相应的只读或只写类型。如若type是”r”则文件指针连接到command的专门的工作输出;借使type是”w”则文件指针连接到command的科公输盘入。

  command参数是3个针对以NULL甘休的shell命令字符串的指针。那行命令将被传到bin/sh并应用-c标识,shell将推行那几个命令。

  popen()的再次来到值是个标准I/O流,必须由pclose来终止。前边提到那个流是单向的(只能用于读或写)。向这些流写内容相当于写入该命令的正规输入,命令的正式输出和调用popen()的经过一样;与之相反的,从流中读数据相当于读取命令的正统输出,命令的正统输入和调用popen()的进度一样。

返回值

  如若调用fork()或pipe()战败,恐怕不可能分配内存将再次来到NULL,不然重返标准I/O流。popen()未有为内存分配退步设置errno值。假如调用fork()或pipe()时出现错误,errno被设为相应的荒唐类型。假若type参数不合规,errno将赶回EINVAL。

函数原型:

 #include “stdio.h”
  FILE *popen( const char *command, const char* mode )
    int pclose(FILE *stream_to_close);

参数表明:

  command: 是三个对准以 NULL 结束的 shell
命令字符串的指针。那行命令将被传到 bin/sh 并选取 -c 标记,shell
将实行这几个命令。

  mode: 只可以是读可能写中的1种,得到的重回值(标准 I/O 流)也存有和
type 相应的只读或只写类型。若是 type 是 “r” 则文件指针连接到 command
的正规输出;假诺 type 是 “w” 则文件指针连接到 command 的正式输入。

作用:

   
popen函数允许1个顺序将其它3个先后当做新历程来运营,并得以传递数据大概经过它承受多少。

    其里面贯彻为调用 fork 发生二个子历程,执行2个 shell,
以运营命令来开启1个进程,那一个进程必须由 pclose() 函数关闭。

缺点:

   
使用popen的不好影响是,针对各类popen调用,不唯有要运维二个被呼吁的顺序,还要运营多少个shell,即各类popen调用将多运行多个经过。

 举例:

#include<stdio.h> 
  #include<unistd.h> 
  #include<string.h>   
  int main() 
  { 
    FILE *fp=NULL; 
    FILE *fh=NULL; 
    char buff[128]={0};   
   memset(buff,0,sizeof(buff)); 
   fp=popen("ls -l","r");//将命令ls-l 同过管道读到fp 
   fh=fopen("shell.c","w+");// 创建一个可写的文件 
   fread(buff,1,127,fp);//将fp的数据流读到buff中 
   fwrite(buff,1,127,fh);//将buff的数据写入fh指向的文件中   
   pclose(fp); 
   fclose(fh);   
   return 0;   
   } 
~        

 运营结果:

[lol@localhost practice]$ ls
popen popen.c shell.c
[lol@localhost practice]$ 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 practice]$ vim popen.c
[lol@localhost practice]$ 

总结

上述所述是作者给大家介绍的Linux中popen函数的效率小结,希望对大家全数帮忙,假使大家有其余疑问请给自个儿留言,作者会及时回复我们的。在此也特别谢谢大家对台本之家网站的支撑!

你可能感兴趣的篇章:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图