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()以外。
|
||
返回值 |
若成功則返回文件指針,否則返回NULL,錯誤原因存於errno中。 | ||
錯誤代碼 |
EINVAL參數type不合法。 | ||
注意事項 |
在編寫具SUID/SGID權限的程序時請儘量避免使用popen(),popen()會繼承環境變量,通過環境變量可能會造成系統安全的問題。 | ||
範例 |
|
||
執行 |
root :x:0 0: root: /root: /bin/bash |
測試:
linux環境
void
get_Ip (char **localIp)
{
FILE *fpIp;
*localIp = (char *) malloc (N * sizeof (char));
memset (*localIp, 0, N * sizeof (char));
system ("ifconfig | grep 'inet addr:'| grep -v '127.0.0.1'| cut -d: -f 2 | awk '{print $1}' > /dev/shm/get_ip.txt");
fpIp = popen ("grep -Ff /dev/shm/get_ip.txt /etc/hosts.d/tcfs.hosts | awk '{print $1}'", "r");
fread (*localIp, N * sizeof (char), sizeof (*localIp), fpIp);
pclose (fpIp);
free (*localIp);
}
轉載:https://www.cnblogs.com/52php/p/5722238.html
參考: