/* * File: 1-2.c * Author: jinyong * * Created on 2011年2月23日, 下午8:43 * * 高级管道操作 * 在Linux C中除了常用的pipe函数建立管道外,还可以使用高级管道函数popen来建立管道, * 使用pclose来关闭管道。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* * */ int main() { FILE *fp; int num; char buf[500]; memset(buf, 0, sizeof(buf)); /** * void *memset(void *s, int ch, unsigned n); * 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, * 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, * 其返回值为指向S的指针。 * */ printf("建立管道.../n"); fp=popen("ls -l","r"); if(fp!=NULL) { num = fread(buf, sizeof(char), 500 ,fp); if(num > 0){ printf("第一个命令是ls -l,运行结果如下:/n"); printf("%s/n",buf); } pclose(fp); }else{ printf("创建管道失败/n"); return 1; } fp = popen("grep 1-1","w"); //调用popen函数,建立管道 /** * 建立管道I/O * FILE *popen(const char *command, const char *type); * 调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的命令。 * 参数type可使用“r”代表读取,“w”代表写入 * * 若成功则返回指针,否则返回NULL,错误存在errno中 * @return */ printf("第二个命令是grep 1-1,运行结果如下/n"); fwrite(buf, sizeof(char), 500, fp); pclose(fp); return 0; }