1. 程式人生 > >Linux popen和pclose函式

Linux popen和pclose函式

popen和pclose

標頭檔案

#include <stdio.h>

函式原型

FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

引數

command執向想要執行的指令,type可使用"r"代表讀取,"w"代表寫入。r時檔案指標連線到標準輸出,w時檔案指標連線到標準輸入。

說明

popen函式本身會呼叫fork()產生子程序,然後從子程序中呼叫   /bin/sh -c   來執行引數command的指令。根據引數type的值,popen函式會建立管道連到子程序的標準輸出裝置或標準輸入裝置,然後返回一個檔案指標。之後此程序可以通過此檔案指標來讀取子程序的輸出或寫入子程序的標準輸入裝置中。 pclose函式關閉標準I/O流,等待命令執行結束,然後返回shell的終止狀態。


unix環境高階程式設計的例子

#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>

#define PAGER "${PAGER:-more}"
#define MAXLINE 100

int main(int argc, char *argv[])
{
	char line[MAXLINE];
	FILE *fpin, *fpout;

	if(argc != 2)
	{
		printf("usage: a.out <pathname>\n");
		exit(1);
	}

	if((fpin = fopen(argv[1], "r")) == NULL)
	{
		printf("can't open %s", argv[1]);
		exit(1);
	}
	if((fpout = popen(PAGER, "w")) == NULL)
	{
		printf("popen error\n");
		exit(1);
	}

	while(fgets(line, MAXLINE, fpin) != NULL)
	{
		if(fputs(line, fpout) == EOF)
		{
			printf("fputs error to pipe\n");
			exit(1);
		}
	}

	if(ferror(fpin))
	{
		printf("fgets error\n");
		exit(1);
	}
	if(pclose(fpout) == -1)
	{
		printf("pclose error\n");
		exit(1);
	}
	exit(0);
}