匿名管道 中的 单工通道(popen)
来源:互联网 发布:it咨询 编辑:程序博客网 时间:2024/06/15 11:23
本质:
启动shell和命令两个进程,从命令进程中读/写文件流。
解决exec和system无返回输出数据问题。
特点:
方便使用系统自带功能,并可以执行比较复杂的shell。
默认启动两个进程,效率较低。
操作:
打开管道:
FILE* popen(const char *command, const char *open_mode);
参数:
command:
命令行字符串。
open_mode:
只读“r”
只写“w”
返回值:
文件描述符。(打开失败返回NULL)
关闭管道:
int pclose(FILE* stream);
参数
stream:
文件描述符。
返回值:
-1失败
0成功
读操作:
size_t fread(void *buffer, size_t size, size_t count, FILE* stream);
参数:
buffer:
用于接收数据的内存地址。
size:
读取每个数据项的字节数。(每个数据所占字节数)
count:
需要读取的数据项个数。
PS:
一共要读取size*count个字节数。
要读取的数据项如果少于count,则有多少读多少,大于则只读count个。
stream:
输入的文件指针。
返回值:
>count出错
正数真实读取的数据项个数(注:和size无关,只是count的值)
写操作:
size_t fwrite(const void *buffer, size_t size, size_t count, FILE* stream);
参数:
buffer:
写入数据的内存地址。
size:
写入数据项的字节数。(每个数据所占字节数)
count:
需要写入的数据项个数。
PS:
一共要写入size*count个字节数。
要写入的数据项如果少于count,则有多少写多少;大于则只写入count个。
stream:
目标文件指针。
返回值:
>count出错
正数实际写入的数据项个数(注:和size无关,只是count的值)
例子:
读:
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){FILE* fd = popen("ps","r");//FILE* fd = popen("ls -l","r");char buf[BUFSIZ];size_t count = 0;printf("read data:\n");do{memset(buf,'\0',BUFSIZ);size_t n = fread(buf,sizeof(char),BUFSIZ-1,fd);if( n > BUFSIZ - 1 ){perror("fread error");exit(EXIT_FAILURE);}count += n;printf("%s",buf);}while(!feof(fd));printf("total size:%ld\n",count);pclose(fd);}
写:
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){FILE* fd = popen("wc","w");//char str[] = "123 456";char str[] = "123 456\n";size_t n = fwrite(str,sizeof(char),sizeof(str),fd);if(n > sizeof(str)){fprintf(stderr,"FILE:%d,LINE:%d-fwrite error",__FILE__,__LINE__);exit(EXIT_FAILURE);}pclose(fd);}
0 0
- 匿名管道 中的 单工通道(popen)
- 匿名管道中的 半双工管道(pipe)
- 管道-popen
- 管道popen
- popen管道
- 管道popen
- IPC-管道(匿名管道)
- linux中的匿名管道和命名管道
- 匿名管道 的 管道复制(dup)
- 管道 linux popen(一)
- 匿名管道,重定向PING中的数据
- 匿名管道
- 匿名管道
- 匿名管道
- 匿名管道
- 匿名管道
- 匿名管道
- 匿名管道
- mininet下sflow监控流量
- windows 7下快速搭建Node.js开发环境
- feOffset element | SVGFEOffsetElement object
- 文章标题
- python下载和安装
- 匿名管道 中的 单工通道(popen)
- sq随笔2
- 优化浏览器前端
- crontab的使用记录
- 在centos6.0 安装svn客户端
- 山东大学计算机组成原理整机实验
- JavaScript —— 下一代物联网全栈开发
- codeforces #412 div2 C Success Rate(二分查找)
- swift js webview wkwebview