[root@localhost]# cat -n /etc/resolv.conf
1 # Generated by NetworkManager
2 nameserver 168.95.192.1
[root@localhost]#
我們要查看/etc/resolv.conf這個檔案的內容;"wc -l"可以計算這個檔案的行數:
[root@localhost]# wc -l /etc/resolv.conf
2 /etc/resolv.conf
[root@localhost]#
[root@localhost]# cat -n /etc/resolv.conf | wc -l
2
[root@localhost]#
我們的目的只要取得"2"這個值,該怎麼做??
// main_r.c #include <stdio.h> #include <string.h> int main(void) { FILE *fp = (FILE *)NULL; char szTemp[4]; memset(&szTemp, '\0', sizeof(char) * 4); fp = popen("cat -n /etc/resolv.conf | wc -l", "r"); if (fp == NULL) perror("Create popen() failed!! \n"); else fread((void *)&szTemp, sizeof(char), 4, fp); printf("szTemp: %s \n", szTemp); pclose(fp); return 0; }反之,我們要把程式中的某一項結果 (數值或是字串)丟給Shell Script來執行呢??
// main_w.c #include <stdio.h> #include <string.h> int main(void) { FILE *fp = (FILE *)NULL; char szTemp[] = "Hello!! World!! \n"; fp = popen("od -c", "w"); if (fp == NULL) perror("Create popen() failed!! \n"); else fwrite((void *)&szTemp, sizeof(char), strlen(szTemp), fp); pclose(fp); return 0; }[root@localhost]# ./main_w
0000000 H e l l o ! ! W o r l d ! !
0000020 \n
0000021
[root@localhost]#
至於popen(), pclose(), perror()的函式原型就不贅述了,可自行Google;或是man, info指令去查詢。
還有,這些函式是屬於比較高階的管線函式,所以必須搭配fread()和fwrite()去執行 (其實用fgets()或fputs()也是可以啦)。
沒有留言:
張貼留言