1. 程式人生 > >Linux popen函式的使用總結

Linux popen函式的使用總結

  函式原型:

  #include “stdio.h”

  FILE *popen( const char* command, const char* mode )

  引數說明:

  command: 是一個指向以 NULL 結束的 shell 命令字串的指標。這行命令將被傳到 bin/sh 並使用 -c 標誌,shell 將執行這個命令。

  mode: 只能是讀或者寫中的一種,得到的返回值(標準 I/O 流)也具有和 type 相應的只讀或只寫型別。如果 type 是 “r” 則檔案指標連線到 command 的標準輸出;如果 type 是 “w” 則檔案指標連線到 command 的標準輸入。

  返回值:

  如果呼叫成功,則返回一個讀或者開啟檔案的指標,如果失敗,返回NULL,具體錯誤要根據errno判斷

  int pclose (FILE* stream)

  引數說明:

  stream:popen返回的檔案指標

  返回值:

  如果呼叫失敗,返回 -1

  作用:

  popen() 函式用於建立一個管道:其內部實現為呼叫 fork 產生一個子程序,執行一個 shell 以執行命令來開啟一個程序這個程序必須由 pclose() 函式關閉。

  例子:

  管道讀:先建立一個檔案test,然後再test檔案內寫入“Read pipe successfully !”

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	FILE *fp;
	char buf[1024] =
	{ 0 };


	if ((fp = popen("cat test", "r")) == NULL)
	{
		perror("Fail to popen\n");
		exit(1);
	}

	while (fgets(buf, 200, fp) != NULL)
	{
		printf("%s\n",buf);
	}
	pclose(fp);
	return EXIT_SUCCESS;
}

管道寫:
#include “stdio.h”

  #include “stdlib.h”

  int main()

  {

  FILE *fp;

  char buf[200] = {0};

  if((fp = popen(“cat > test1″, “w”)) == NULL) {

  perror(“Fail to popen\n”);

  exit(1);

  }

  fwrite(“Read pipe successfully !”, 1, sizeof(“Read pipe successfully !”), fp);

  pclose(fp);

  return 0;

  }

執行完畢後,當前目錄下多了一個test1檔案,開啟,裡面內容為Read pipe successfully !