#Linux#进程间通信# 管道(pipe)-标准流管道pipe

#Linux#进程间通信# 管道(pipe)-普通管道pipe中,我们很容易可以看出普通管道一是单工,即只能单向传输,而标准流管道针对匿名管道PIPE一系列封装。返回文件流。只不过返回的文件流无法使用游标/偏移量(offset)相关函数,如lseek等

标准流管道带有缓冲区,函数如下:

FILE* popen(char* command ,char* type);

command:指向的是一个以 null 结束符结尾的字符串,这个字符串包含一个 shell 命令,并被送到/bin/sh 以-c 参数执行,即由 shell 来执行;

type:表示的是读写方式,只能是其中一种方式,不能读写同时进行。

  • ”r”: 文件指针连接到 command 的标准输出
  • “w” :文件指针连接到 command 的标准输入
int pclose(FILE* stream);

stream:要关闭的文件流。

 

popen函数其实是对管道操作的一些包装,所完成的工作有以下几步:

  1. 创建一个管道。
  2. fork 一个子进程。
  3. 在父子进程中关闭不需要的文件描述符。
  4. 执行 exec 函数族调用。
  5. 执行函数中所指定的命令。

 

具体用法如下:在shell中运行命令dmesg | grep "WARNING:" | wc -l, 并且将结果内容读取到当前进程的文件流f中。

int get_warnings_count(void)
{
	int warnings;
	FILE *f;

	f = popen("dmesg | grep \"WARNING:\" | wc -l", "r");
	fscanf(f, "%d", &warnings);
	fclose(f);

	return warnings;
}

因此,可见标准流管道一般用于与shell相关命令有关的一些操作...

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值