我試圖製作一個程序,該程序使用exec
調用ls
和grep
系統調用。具體而言,我必須執行ls > tmp; grep -c pattern < tmp
以計算滿足該模式的文件數量。正如你所看到的,我將ls的內容保存在tmp文件中,然後我想用grep來計算這些文件。使用execl獲取grep值
我們來看看pattern = txt
。我想要的東西,如下面的代碼:
char *a = "ls > tmp";
char *b = " -c ";
char *fin = " < tmp";
char *comanda;
if((comanda = malloc(strlen(pattern)+strlen(pattern)+1)) != NULL){
comanda[0] = '\0'; // ensures the memory is an empty string
strcat(comanda,b);
strcat(comanda, pattern);
strcat(comanda,fin);
} else {
return -1;
}
ret = execl("/bin/sh","sh","-c",a,NULL);
ret = execl("/bin/sh","sh","-c",comanda, NULL);
但它讓我看到以下錯誤:ls: cannot access > tmp: No such file or directory
。所以我不知道如何得到grep
的值,因爲execl
函數沒有返回值,所以我怎樣才能達到grep
的值呢?
您需要在()'和'叉創建一個子進程運行'execl'。 'execl()'用你運行的程序替換當前進程,它只會在嘗試加載程序時出錯。 – Barmar
這是我的實際觀點,在一個子進程中,我將使用'execl',但無論如何,我得到的錯誤是:'ls:無法訪問> tmp:沒有這樣的文件或目錄' –
我不能再現那個錯誤,除非我改變它到'char * a =「ls'> tmp'」;' – Barmar