星期二, 3月 21, 2006

popen : 用fork執行外部command

這個也是當初Chris和Alice做的,現在又要用了。所以紀錄一下。

用fork/vfork+exec 執行外部command的話,沒辦法和外部程式溝通。
用popen的話,就可以取得執行command的stdio,利用這個stdio來溝通。
使用方法是 :
 #include <stdio.h>

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

int pclose(FILE *stream);
command就是要執行的命令,包含path, programname 和argument。
type只有"r"或"w"兩種。不可以"rw"。
使用完後,要用fclose來關閉stream。

使用popen麻煩在於stdio只能作read或是write,不能同時rw,所以不能作為parent和child process溝通用(雙向)。

解決的方法大概要用兩個pipe,然後用dup2 把child process的STDIN/OUT換成這兩個pipe。
然後再exec external program..

parent就可以用這兩個pipe跟child process溝通。

沒有留言:

網誌存檔