execve错误:没有这样的文件或目录

时间:2014-10-29 02:52:38

标签: c linux fork wait execve

我正在尝试编写一个程序来执行和安排进程列表。我的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”)

1 个答案:

答案 0 :(得分:1)

我怀疑该错误出现在您未展示的代码readPrograms中。很可能你用fgets读取文本文件的行,并且每个字符串的末尾都有换行符,而你的文件名中没有换行符。