Linux C popen()函數詳解


表頭文件

#include<stdio.h>

定義函數

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

函數說明

popen()會調用fork()產生子進程,然后從子進程中調用/bin/sh -c來執行參數command的指令。參數type可使用“r”代表讀取,“w”代表寫入。依照此type值,popen()會建立管道連到子進程的標准輸出設備或標准輸入設備,然后返回一個文件指針。隨后進程便可利用此文件指針來讀取子進程的輸出設備或是寫入到子進程的標准輸入設備中。此外,所有使用文件指針(FILE*)操作的函數也都可以使用,除了fclose()以外。

  • 如果 type 為 r,那么調用進程讀進 command 的標准輸出。
  • 如果 type 為 w,那么調用進程寫到 command 的標准輸入。

返回值

若成功則返回文件指針,否則返回NULL,錯誤原因存於errno中。

錯誤代碼

EINVAL參數type不合法。

注意事項

在編寫具SUID/SGID權限的程序時請盡量避免使用popen(),popen()會繼承環境變量,通過環境變量可能會造成系統安全的問題。

范例

#include<stdio.h>

main()
{
	FILE *fp;
	char buffer[80];
	fp = popen("cat /etc/passwd", "r");
	fgets(buffer, sizeof(buffer), fp);
	printf("%s", buffer);
	pclose(fp);
}

執行

root :x:0 0: root: /root: /bin/bash

 

 

參考:

Linux C編程--popen函數詳解 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM