如何在Linux中使用popen函数

  介绍

如何在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函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

如何在Linux中使用popen函数