2013-06-19 48 views
0

我无法通过execlp执行二进制文件。无法通过execlp执行二进制文件

chdir("/home/foo/bar/baz/MB/"); 
execlp("bash", "bash", "./foobarbaz 1", NULL); 

foobarbaz是我c文件,我得到以下错误:

./foobarbaz: cannot execute binary file 

我试图做chmod +x foobarbaz.c

test.c其中execlp存在的文件。

我在犯什么错误?

+0

“foobarbaz是我的c文件”真的吗?你的意思是它是你编译的可执行文件还是它实际上是一个源代码文件? – kfsone

+0

扩展是'.c' – pistal

+0

在bash中,你可以'cd/home/foo/bar/baz/MB /'和'./foobarbaz 1'吗? – kfsone

回答

2

您可以直接运行的二进制:

execlp("./foobarbaz", "./foobarbaz", "1", (char *)0); 

外壳是用来执行shell脚本(至少,当你说bash ./foobarbaz 1);你的二进制文件不是一个shell脚本。

+0

只需要添加一个问题: 这是否意味着,直到执行完成才返回shell? – pistal

+0

当您使用'execlp()'时,不涉及shell;进程(你的'。/ foobarbaz'程序)替换当前的程序,当'。/ foobarbaz'退出时,进程终止。如果你通过shell('bash')来调用它,你可能写了:'execlp(“bash”,“bash”,“-c”,“./foobarbaz 1”,(char *)0) ;'然后你启动的shell将会启动'。/ foobarbaz',并且在退出之前shell会等待'。/ foobarbaz'完成。但是这意味着'bash'已经取代了当前的进程,而不是'。foobarbaz'。 –

0

当你编译一个C文件 - 像foo.c的你会得到一个输出二进制

cc foo.c 

给./a.out为二进制文件

cc foo.c -o foo 

给./foo作为二进制文件

foo.c不可执行。

+0

我没有把它作为'./foo 1'而不是'foo.c 1',对吧?为什么它仍然是一个错误? – pistal

相关问题