Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在进程中编译源代码C_C_Unix_Exec_Fork - Fatal编程技术网

在进程中编译源代码C

在进程中编译源代码C,c,unix,exec,fork,C,Unix,Exec,Fork,我想在父进程中编译源C,然后创建可执行文件,我想将其运行到子进程中。有什么想法吗 多谢各位 #include <stdio.h> #include <stdlib.h> #define execle("/bin/ls","bin/ls","-l",NULL); int main(int argc , char **argv ) { int i; for(i=1 ; i<argc ; i++) { if(argv[1]=="

我想在父进程中编译源C,然后创建可执行文件,我想将其运行到子进程中。有什么想法吗

多谢各位

#include <stdio.h>
#include <stdlib.h>

#define execle("/bin/ls","bin/ls","-l",NULL);

int main(int argc , char **argv )
{
    int i;
    for(i=1 ; i<argc ; i++)
    {
        if(argv[1]==".c")
        {
            if(fork()==0)
            {
                execle("/usr/bin/gcc","/usr/bin/gcc",argv[1],NULL);
                exit(1);
            }    
        }

        if(argv[2]==".out")
        {
            if(fork()==0)
            {
                execle("/bin/cat","bin/cat/",argv[2],NULL);
                exit(1);
            }
        }
    } 
    return 0;
}
#包括
#包括
#定义execle(“/bin/ls”,“bin/ls”,“-l”,NULL);
int main(int argc,字符**argv)
{
int i;

对于父/驱动程序中的(i=1;i,请使用
system(3)
调用或
fork/exec/wait
组合来运行编译器。然后可以使用相同的调用来运行新编译的可执行文件


在实现它时,请记住它的安全方面。这种东西有巨大的利用潜力。

在父/驱动程序中,使用
系统(3)
调用或
fork/exec/wait
的组合来运行编译器。然后,您可以使用相同的调用来运行新编译的可执行文件

#define execle("/bin/ls","bin/ls","-l",NULL);
在实现它的时候要记住它的安全性。这种东西有巨大的开发潜力

#define execle("/bin/ls","bin/ls","-l",NULL);
你希望这条线做什么

这两条线

if(argv[1]==".c")
if(argv[2]==".out")
不要做你想做的事

试一试

更多:

而且

实际上不存在,因此将其更改为
execle
#include

更多:

你应该以这样的方式结束:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc , char **argv)
{
    int i;
    for(i=1 ; i<argc ; i++)
    {
        if(strcmp(".c" , argv[1]) == 0)
        {
            if(fork()==0)
            {
                execle("/usr/bin/gcc","/usr/bin/gcc",argv[1],NULL);
                exit(1);
            }    
        }

        if(strcmp(".c" , argv[1]) == 0)
        {
            if(fork()==0)
            {
                execle("/bin/cat","bin/cat/",argv[2],NULL);
                exit(1);
            }
        }
    } 
    return 0;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
int i;
对于(i=1;i
你希望这条线做什么

这两条线

if(argv[1]==".c")
if(argv[2]==".out")
不要做你想做的事

试一试

更多:

而且

实际上不存在,因此将其更改为
execle
#include

更多:

你应该以这样的方式结束:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc , char **argv)
{
    int i;
    for(i=1 ; i<argc ; i++)
    {
        if(strcmp(".c" , argv[1]) == 0)
        {
            if(fork()==0)
            {
                execle("/usr/bin/gcc","/usr/bin/gcc",argv[1],NULL);
                exit(1);
            }    
        }

        if(strcmp(".c" , argv[1]) == 0)
        {
            if(fork()==0)
            {
                execle("/bin/cat","bin/cat/",argv[2],NULL);
                exit(1);
            }
        }
    } 
    return 0;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
int i;

对于(i=1;i将其写入一个文件,系统输出到编译器,删除源文件并执行生成的二进制文件(假设编译工作正常)?从技术上讲,您想要的东西没有意义。编译器完成后,编译器进程将不再存在,因此它将无法拥有任何子进程,因为它将不存在。不过,您可以在子进程中同时执行这两个操作。将其写入文件,系统输出到编译器,删除源文件并执行二进制生成d(假设编译成功)?从技术上讲,您想要的是没有意义的。编译器完成后,编译器进程将不再存在,因此它将无法拥有任何子进程,因为它将不存在。不过,您可以在子进程中同时执行这两个操作。