我想執行 execvp,或者真正適用于這個的任何一個,但只在給定的檔案上運行它。為了解釋我要做什么,我試圖在滿足給定其他引數的檔案上運行它。例如: (./a.out -s 1024 -e "ls -l") -s 如果檔案大小 >= 1024 然后顯示該檔案,然后對該檔案執行命令“ls -l”。我的代碼檢查目錄中的每個檔案,只顯示通過的檔案。我無法理解如何只顯示一個檔案而不是目錄中的所有檔案。
if (flagArgs.e_flag) // e case
{
char *cmd = "ls";
char *argv[3];
argv[0] = "ls";
argv[1] = "-la";
argv[2] = NULL;
printf("DIRFILE: %s\n", dirfile);
if (strcmp(line, "") != 0){
if ((pid = fork()) < 0) { /* fork a child process */
printf("*** ERROR: forking child process failed\n");
exit(1);
}
else if (pid == 0) { /* for the child process: */
if (execvp(dirfile, argv) < 0) { /* execute the command */
printf("*** ERROR: exec failed\n");
exit(1);
}
}
else { /* for the parent: */
while (wait(&status) != pid) /* wait for completion */
;
}
}
}
我知道我在這段代碼中使用 execvp 是錯誤的,因為我應該傳遞 (cmd, argv) 但我試圖弄清楚如何在一個單一檔案上運行給定的命令。有什么辦法可以做到這一點,或者使用 execvp 是錯誤的嗎?
謝謝你的幫助!
uj5u.com熱心網友回復:
將檔案名添加到argv陣列中。的第一個引數execvp()應該是要運行的程式,通常與argv[0].
if (flagArgs.e_flag) // e case
{
char *cmd = "ls";
char *argv[4];
argv[0] = "ls";
argv[1] = "-la";
argv[2] = dirfile;
argv[3] = NULL;
printf("DIRFILE: %s\n", dirfile);
if (strcmp(line, "") != 0){
if ((pid = fork()) < 0) { /* fork a child process */
printf("*** ERROR: forking child process failed\n");
exit(1);
}
else if (pid == 0) { /* for the child process: */
if (execvp(argv[0], argv) < 0) { /* execute the command */
printf("*** ERROR: exec failed\n");
exit(1);
}
}
else { /* for the parent: */
while (wait(&status) != pid) /* wait for completion */
;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344663.html
下一篇:將檔案中的文本讀入陣列時跳過整數
