我正在尝试编写一个程序来执行和安排进程列表。我的main.c代码如下。运行时,我收到来自perror的错误,说没有这样的文件或目录。我猜这是因为我的files.txt中的文件/程序不是二进制可执行文件,但我不知道如何解决这个问题。 files.txt包含我想要运行的程序列表。它们已经全部转换为二进制可执行文件。 programs是一个包含readPrograms函数读取的四个程序的数组
int main(int argc, char ** argv) {
pid_t pid[50];
pid_t wpid;
int i, j;
int status = 0;
char *newenvp[] = {NULL};
char *newargv[] = {"./files.txt", NULL};
printf("Before forking in the parent\n");
int numProgs = readPrograms();
for (i=0; i<numProgs; i++) {
pid[i] = fork();
if (pid[i] < 0) {
perror("fork error");
exit(EXIT_FAILURE);
}
else if (pid[i] == 0) {
printf("Child process running\n");
execve(programs[i], newargv, newenvp);
perror("execve error");
exit(EXIT_FAILURE);
}
}
for (i=0; i<numProgs; i++) {
wait(&status);
}
return 0;
}
char* programs[50];
int readPrograms();
下面的文件.txt
./first
./second
./third
./fourth
(我分别为所有这些文件做了“cc first.c -o first”)
答案 0 :(得分:1)
我怀疑该错误出现在您未展示的代码readPrograms
中。很可能你用fgets
读取文本文件的行,并且每个字符串的末尾都有换行符,而你的文件名中没有换行符。