linux C - popen() function

#include <stdio.h>

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

int pclose(FILE *stream);

描述

popen() 函數使用建立管道的方式, 並使用 shell.  因為管道是被定義成單向的, 所以 type 參數只能定義為 read 或 write, 不能是read/write 兩者同時定義, result stream也只可read或write.

command 參數是一個string pointer, 指向的是一個以null 為結尾的字串,這個字串包含一個shell命令. 這個命令被送到 /bin/sh 以 -c 參數執行,即由shell來執行. type 參數也是一個指向以null為結尾的string pointer, 這個字串必須是'r'或者'w'來定義是讀還是寫.

popen() 函數的回傳值是一個普通的標準I/O stream,它只能用 pclose() 函數來關閉,而不是fclose().函數.

像這個流的寫入被轉化為對command命令的標準輸入;而command命令的標準輸出則是和調用popen(),函數的進程相同,除非這個被command命令自己改變.相反的,讀取一個“被popen了的”流,就相當於讀取command命令的標準輸出,而command的標準輸入則是和調用 popen,函數的進程相同.

注意, popen 函數的輸出流默認是被全緩衝的.

pclose 函數等待相關的進程結束並返回一個command命令的退出狀態,就像 wait4 函數一樣

示例:
#include <stdio.h>

int main(int argc, char *argv[])
{
char buf[128];
FILE *pp;

if( (pp = popen("ls -l", "r")) == NULL )
{
printf("popen() error!\n");
exit(1);
}

while(fgets(buf, sizeof buf, pp))
{
printf("%s", buf);
}
pclose(pp);
return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值