execl-won';t、 好吧,执行

execl-won';t、 好吧,执行,c,exec,C,Exec,正在处理一个项目,当我调用execl()时,它不工作。它是在fork之后调用的,应该是重新执行当前文件。 (参数在文件前面声明): 我读过的每一篇文章都让我觉得这应该行得通。第一个参数指定路径,第二个参数指定要执行的文件,第三个参数指定字符串,第四个参数指定占位符,这样当EXCL通过时,arc==3,第四个参数指定空终止符 有人能帮忙吗?argv[0]只保存文件名,而不保存execl所需的完整目录路径 试试这样的东西: char *cwd; cwd=malloc(255); getcwd(cwd

正在处理一个项目,当我调用execl()时,它不工作。它是在fork之后调用的,应该是重新执行当前文件。 (参数在文件前面声明):

我读过的每一篇文章都让我觉得这应该行得通。第一个参数指定路径,第二个参数指定要执行的文件,第三个参数指定字符串,第四个参数指定占位符,这样当EXCL通过时,arc==3,第四个参数指定空终止符


有人能帮忙吗?

argv[0]
只保存文件名,而不保存
execl
所需的完整目录路径

试试这样的东西:

char *cwd;
cwd=malloc(255);
getcwd(cwd,255);
strcat(cwd,"/");
strcat(cwd,argv[0]);

execl

中使用上面构造的
cwd
你能给出一个完整的例子来演示这个失败吗?
errno
告诉你什么?@MartinR errno告诉我“没有这样的文件或目录”什么是
argv[0]
?它是绝对的还是相对的?当前目录是什么?也许Igor的答案是正确的。argv[0]是当前二进制文件的名称。在本例中,这是“位计数”。我尝试过,将argv[0]替换为:“bit_count”、“/bit_count”和“/bit_count”,但都没有运气。argv[0]参数只是我当前的尝试。如果相对路径对当前路径有效,我认为它也应该起作用directory@Martin的确如此,但我曾经有一次在Linux下调用
execl
@igorpov时需要完整的路径,当我尝试这一点时,我最终得到了“…fullpathtocurrentdirectory//bit\u count”无效。我尝试执行的文件与我调用execl的文件相同,是否有任何理由使用
execl(“/bit\u count”,“bit\u count”,左,“1”,NULL);
不应working@Reeza我不确定。在一些旧的linux发行版上(几年前)它仅适用于完整路径名,而在我当前的Linux Mint 14上,它适用于相对路径。环境变量可能在此处发挥作用。请检查:@Reeza,将当前目录(.)设置为path环境变量的第一个参数(例如export path=.:$path)。execl手册页包含:“在某些其他系统上,作为反特洛伊木马措施,默认路径(在环境不包含变量路径时使用)在/bin和/usr/bin之后列出了当前工作目录。Linux在这里使用传统的“当前目录优先”默认路径
char *cwd;
cwd=malloc(255);
getcwd(cwd,255);
strcat(cwd,"/");
strcat(cwd,argv[0]);