雖然我認爲我掌握瞭如何在C中使用fork()
,exec()
,wait()
和pid
,但我還沒有找到如何在程序中運行個人程序的方法。如何從終端輸入(linux)運行程序?
這裏是我的代碼:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h> /* for fork() */
#include<sys/types.h> /* for pid_t */
#include<sys/wait.h> /* fpr wait() */
int main(int argc, char* argv[])
{
char fileName[255];
pid_t pid;
switch (pid = fork()) {
case -1: //Did not fork properly
perror("fork");
break;
case 0: //child
execv(fileName[0],fileName);
puts("Oh my. If this prints, execv() must have failed");
exit(EXIT_FAILURE);
break;
default: //parent
//Infinite Loop
while (1) {
printf(" %s > ", argv[0]);
scanf("%s", fileName); // gets filename
if (fileName[0] == '\0') continue;
printf("\n Entered file: %s",fileName); // prints the fileName
waitpid(pid,0,0); /* wait for child to exit() */
break;
}
}
return 0;
}
我的問題有以下幾點:
我想帶一個字符串作爲輸入,我想它的範圍限制在255個字符。是
char fileName[255]
然後scanf("%s", fileName);
要走的路?我應該使用getLine()
還是其他一些功能?假設輸入正確。我如何執行說一個現有的hello世界程序。輸入是否存儲在
*argv[]
?我發現在不同的程序中,我可以使用static char *argv[] = { "echo", "Foo is my name." , NULL }; execv("/bin/echo", argv);
爲了回聲「Foo是我的名字」。我可以用helloWorld程序做類似的事嗎?
謝謝你的快速和完整的答案。你無法完全理解的問題的唯一部分是假設我將fileName設置爲一個值。你的意思是初始化嗎?在那種情況下,我沒有。我需要嗎?在我腦海中當程序運行時,它會提示用戶和用戶輸入類似「./helloWorld」或「/bin/./helloWorld」的內容。這將是fileName的值。 –
該名稱的輸入是我的意思是'將'fileName'設置爲一個值'。正如所寫的,您使用未初始化的字符串作爲命令,這不太可能奏效。只要你將'fileName'設置爲某種適當的東西,你應該沒問題。 '。/ helloWorld'和'/ bin /./ helloWorld'都可以工作,不需要'./'('execv()'不受'$ PATH'的影響,如果只指定'helloWorld',它將被視爲與'。/ helloWorld'相同)。 '/ bin /./ helloWorld'是iffy; '/./'可能只是'/',你不應該把軟件放在'/ bin'中。 –