用fork/vfork+exec 執行外部command的話,沒辦法和外部程式溝通。
用popen的話,就可以取得執行command的stdio,利用這個stdio來溝通。
使用方法是 :
#include <stdio.h>command就是要執行的命令,包含path, programname 和argument。
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
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溝通。
沒有留言:
張貼留言