[英]executing a program in C linux using fork and exec
我想使用fork
和exec
系統調用在Linux中執行C程序。 我已經寫了一個程序msg.c ,它工作正常。 然后我編寫了一個程序msg1.c。
當我執行./a.out msg.c
,它只是將msg.c
打印為輸出,而不執行我的程序。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /* for fork */
#include <sys/types.h> /* for pid_t */
#include <sys/wait.h> /* for wait */
int main(int argc,char** argv)
{
/*Spawn a child to run the program.*/
pid_t pid=fork();
if (pid==0)
{ /* child process */
// static char *argv[]={"echo","Foo is my name.",NULL};
execv("/bin/echo",argv);
exit(127); /* only if execv fails */
}
else
{ /* pid!=0; parent process */
waitpid(pid,0,0); /* wait for child to exit */
}
return 0;
}
argv [0]包含程序的名稱,您正在回顯它。 完美地工作;-)
/ bin / echo msg.c將打印msg.c作為輸出,如果您需要執行msg二進制文件,則需要將代碼更改為execv(“ path / msg”);
您的執行程序執行程序回顯,打印出argv的值;
此外,如果它是一個源文件,則不能“執行” msg.c,必須先對其進行編譯( gcc msg.c -o msg
),然后再調用exec("msg")
C程序不是可執行文件 (除非您使用不常用的C解釋器)。
您需要先使用GCC之類的編譯器對其進行編譯,然后使用以下命令將msg.c
源文件編譯為msg-prog
可執行文件(使用-Wall
獲取所有警告,使用-g
從gcc
編譯器獲取調試信息):
gcc -Wall -g msg.c -o msg-prog
小心改進msg.c
直到沒有任何警告。
然后,您可能想用更明智的方式替換源代碼中的execv
。 讀取execve(2)和execl(3)和perror(3) 。 考慮使用
execl ("./msg-prog", "msg-prog", "Foo is my name", NULL);
perror ("execl failed");
exit (127);
閱讀高級Linux編程 。
注意:您可以將可執行文件命名為msg
而不是msg-prog
...。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.