![](/img/trans.png)
[英]Getting `execve failed: No such file or directory` when calling `boost::process::system()` with separate arguments
[英]calling execve() + changing PWD
我想寫一個執行另一個程序B
的程序A
從它的目錄執行程序B
非常重要,因為它打開了位於B
的同一目錄中的程序BB
。
我的意思是: ./B
會起作用
./b/B
不起作用
我想過兩種方法:
fork()
,更改env中的PWD,然后調用execv()
fork()
,創建時態變量, envp
,並調用execve()
讓我們說程序A
在這里: /home/a
,程序B
和BB
坐在這里: /home/a/b
這是我在/home/a
的程序代碼A
#include <iostream>
#include <errno.h>
int main() {
int pid;
char *cmd[20] = {"/home/a/b/B", NULL};
if ((pid = fork()) == 0) {
/*if (putenv("PWD=/home/a/b") < 0) {
fprintf(stderr, "error PWD%s\n", strerror(errno));
}*/
char *envp[20] = {"PWD=/home/a/b", NULL};
execve( cmd[0], cmd, envp);
fprintf(stderr, "error: execv: %s\n", strerror(errno));
exit(0);
} else if (pid < 0) {
fprintf(stderr, "error: fork: %s\n", strerror(errno));
exit(0);
}
fprintf(stderr, "father quits\n");
返回0; }
我嘗試了我的兩個解決方案,但是沒有一個能夠工作,我的意思是,我設法執行程序B
,但它找不到程序BB
。 我還打印了程序B
的PWD,它是/home/a/b/
- 但是它仍然無法執行BB
。
可能嗎? 有人能看出我做錯了嗎?
謝謝
您正在尋找chdir()
而不是envp
操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.