[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_w0000000 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()也是可以啦)。
沒有留言:
張貼留言