在 child 进程中使用 execvp 在 c 中显示 return 新程序的值

display return value of new program in c using execvp in child process

正在处理 uni 任务,我需要使用 1 个 parent 进程创建 3 个 child 进程,然后对每个 child 进程执行一些计算。我卡在 child 2 上,我需要加载一个程序,该程序 returns 文本文件中的字数并将其显示在控制台上。

这是我的字数统计文件:

wc.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main( int argc, char *argv[]) {
    char *wordCountFile = argv[1];
    printf("file name passed is %s\n",wordCountFile);
    printf("testing\n");
}

上面的文件实际上并没有计算文件中的字数,因为我正在努力让它显示在控制台中

在我的主程序中我有

child2 = fork();
        wordCountFile = argv[1];
        char *cmd = "wc";
        char *args[3];
        argv[0] = "wc";
        argv[1] = wordCountFile;
        argv[2] = NULL;
        if (child2 == 0){
            printf("I am child two my pid is %d \n",getpid());
            printf("I will now execute wc program to count all the words in file %s \n",wordCountFile);
            execvp(cmd, args);
            exit(3);
        }

我的输出如下:

I am child two my pid is 659
I will now execute wc program to count all the words in file test.txt

我正在尝试让 wc 程序打印到控制台

我编译了wc.c,程序和我的主要代码在同一个目录下。

你的主程序有一些错误。您正在修改 argv 并将 args 传递给 execvpe,并且您正在调用 wc 程序而不是 ./wc。如果您在 unix 系统中,您可能有 /usr/bin/wc,并且 execvpe 将调用该程序。

更正您的主程序

child2 = fork();
        wordCountFile = argv[1];
        char *cmd = "./wc";
        char *args[3];
        args[0] = "./wc";
        args[1] = wordCountFile;
        args[2] = NULL;
        if (child2 == 0){
            printf("I am child two my pid is %d \n",getpid());
            printf("I will now execute wc program to count all the words in file %s \n",wordCountFile);
            execvp(cmd, args);
            exit(3);
        } 

现在主程序会调用当前目录下的wc程序。