1)解決問題後: How to translate 'system()' call to 'fork() + execl()' when dealing with awk command?'系統' 到 '叉+ execv' 與awk命令處理時
2)I遇到根據墨爾波墨涅的方法的另一個問題:
#define LOG_FILE_PATH "/tmp/logfile"
system("awk -v FS=\"[][]\" -v BEGINTIME=\"$BEGINTIME\" -v ENDTIME=\"$ENDTIME\" '$2>=BEGINTIME && $2<=ENDTIME' "LOG_FILE_PATH);
它的工作原理罰款,我得到我想要的。
3)翻譯成叉+ execl的版本:
sprintf(tmp1, "BEGINTIME=%s", getenv("BEGINTIME"));
sprintf(tmp2, "ENDTIME=%s", getenv("ENDTIME"));
sprintf(tmp3, "$2>=%s && $2<=%s", getenv("BEGINTIME"), getenv("ENDTIME"));
execl("/usr/bin/awk", "awk", "-v", "FS=\"[][]\"", "-v", tmp1, "-v", tmp2, tmp3, LOG_FILE_PATH, (char *)0);
它輸出什麼,爲什麼?
我改成 ' sprintf(tmp3,「$ 2> =%s && $ 2 <=%s」,「BEGINTIME」,「ENDTIME」);' 但它也不起作用。 – dejunl 2013-02-26 11:51:12
「不起作用」不是有用的診斷。 – 2013-02-26 11:52:55
@dejunl我剛剛注意到你也在錯誤地設置FS。回答編輯。 – 2013-02-26 13:20:16