我试图通过解释器文件执行程序。我在C中使用了fork()和execl()函数。这是我的代码:
if ((pid = fork()) < 0)
printf("fork error");
else if (pid == 0) { /* child */
if (execl( "/home/alien/testinterp", /* the interpreter file */
"testinterp", "arg1", (char *)0) < 0)
printf("execl error");
在文件“/ home / alien / testinterp”中,有:
#!/bin/sh
我可以在shell中运行/ bin / sh。我使用Emacs编辑了解释器文件。
当我运行程序时,我会输入错误。(“execl error”)。
我做错了什么?
答案 0 :(得分:1)
借助问题帖子的评论,回答是:
/home/alien/testinterp
不可执行,因此向此文件添加可执行位将解决问题:chmod +x /home/alien/testinterp
PS1 :我怎么猜?
我使用Emacs编辑了解释器文件
我猜这个文件可能是新创建的,没有可执行位。
PS2 :猜测不能真正解决问题,有什么更好的方法?
打印errno
,perror()
非常有用。
此错误来自exec*()
,你可以尝试直接通过shell执行它来显示会发生什么
$ / home / alien / testinterp arg1
某些函数如exec*()
,fork()
是syscall的包装器,您可以使用strace
在调用系统调用时显示信息。
strace -ff path_to_your_program