簡體   English   中英

使用fork和exec在C linux中執行程序

[英]executing a program in C linux using fork and exec

我想使用forkexec系統調用在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獲取所有警告,使用-ggcc編譯器獲取調試信息):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM