C 语言popen函数,实现shell和读取内容

1. popen()函数

头文件:#include <stdio.h>

函数原型:FILE * popen(const char * command, const char * type);

关闭文件流:int pclose(FILE * stream);

  函数popen 先执行fork,然后调用exec以执行cmd,并且返回一个标准I/O文件指针。

  cmd是一个包含shell命令的字符串指针(以NULL结束字符结尾);
  如果type是"r",则文件指针连接到cmd的标准输出;
  如果type是"w",则文件指针连接到cmd的标准输入。

2. 描述

  popen() 函数用创建管道的方式启动一个进程, 并调用 shell. 因为管道是被定义成单向的, 所以type参数只能定义成只读或者只写, 不能是两者同时, 结果流也相应的是只读或者只写.

  command 参数是一个字符串指针, 指向的是 一个以 null 结束符结尾的字符串, 这个字符串包含一个 shell 命令. 这个命令被送到 /bin/sh 以 -c 参数执行, 即由 shell 来执行. type 参数也是一个 指向以 null 结束符结尾的字符串的指针, 这个字符串必须是 ‘r‘ 或者 ‘w’ 来指明是读还是写.

  popen() 函数的返回值是一个普通的标准I/O流, 它只能用 pclose() 函数来关闭, 而不是 fclose() 函数.

  注意, popen 函数的输出流默认是被全缓冲的;pclose 函数等待相关的进程结束并返回一个 command 命令的退出状态, 就像 wait4 函数 一样

3. 示例

 1 #include <stdio.h>
 2
 3 int main(void)
 4 {
 5     FILE * fp;
 6     if ((fp = popen("ls -l", "r)) == NULL)
 7     {
 8         perror("open failed!");
 9         return -1;
10     }
11     char but[256];
12     while (fgets(but, 255, fp) != NULL)
13         printf("%s", buf);
14     if (pclose(fp) == -1)
15     {
16         perror("close failed!");
17         return -2;
18     }
19     return 0;
20 }
时间: 2024-12-26 07:24:07

C 语言popen函数,实现shell和读取内容的相关文章

linux下C和shell调用的popen函数

说明: 本文介绍popen函数的使用方法和行为机理,并给出实际的例子来辅助说明了popen函数的使用方法. popen函数使用FIFO管道执行外部程序,首先让我们看看popen的函数原型吧: #include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream); popen 通过type是r 还是w 来确定command的输入/输出方向,r和w是相对command的管道而言

popen函数的用法及注意事项

标准I/O库提供了两个函数popen和pclose这两个函数,它们的功能是创建一个连接到另一个进程的管道,然后读其输出或向其输入端发送数据.先fork一个子进程,关闭未使用的管道端. popen() 函数 用 创建管道 的 方式启动一个 进程, 并调用 shell. 因为 管道是被定义成单向的, 所以 type 参数 只能定义成 只读或者 只写, 不能是 两者同时, 结果流也相应的 是只读 或者 只写. 函数popen的原型: FILE* POPEN(const char* cmdstring,

UNIX环境高级编程之-----popen函数

头文件: #include <stdio.h> 函数说明: FILE * popen ( const char * command , const char * type ); int pclose ( FILE * stream ); 说明:(参考unix环境高级编程) popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程.这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数.pclose() 函数关闭标准

linux popen函数

函数原型 FILE *popen(const char *command, const char *type); int pclose(FILE *stream); 函数说明 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这个管道必须由pclose()函数关闭,而不是fclose()函数.pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态.如果shell不能被执行,则pclose()返回的终止状态

Linux popen()函数详解

表头文件 #include<stdio.h> 定义函数 FILE * popen( const char * command,const char * type); 函数说明 popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令.参数type可使用“r”代表读取,“w”代表写入.依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针.随后进程便可利用此文件指针来读取子进程的输出设备或是写

popen 函数

函数原型: #include<stdio.h> FILE*   popen(const  char*  command,    const   char*  type); void  pclose(FILE*  stream); man文本英语描述: DESCRIPTION:       The popen() function opens a process by creating a pipe,  forking,  and       invoking  the shell.  Sinc

C语言scanf函数详细解释(转)

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格式化说明

C语言 fread函数

C语言 fread函数 fread fread函数:读取文件函数(从文件流读取数据) 头文件:#include<stdio.h> 函数原型: size_t fread(void * ptr, size_t size, size_t nmenb, FILE* stream); 函数说明:从文件流中读取数据,stream为已打开的文件指针,ptr指向欲保存读取文件数据的空间,size为从文件中读取字符的大小,nmenb为欲读取字符数,读取成功后fread会返回一个值等同于nmenb的数值,相反会返

os.system和os.popen函数

os.system和os.popen函数: python调用shell命令有2种方法:os.system()和os.popen() os.system()的返回值只会有0(成功),1,2:os.popen()会把执行命令的输出作为值返回,可实现一个"管道",从这个命令获取的值可以继续被调用. 示例: vi a1.py #!/usr/bin/python import os a = os.popen('df -h /').readlines()a2 = ''.join(a)print a