->运行 使用 execv 的 wc 命令

->Running wc command using execv

我正在尝试创建一个简单的函数来计算文本文件中的行数并使用 Unix 命令 wc(字数统计)打印它。我不明白为什么它不起作用;我为 wc 位置尝试了不同的路径,但没有任何效果。

相反,我收到此错误:

�%r  : No such file or directory

我想使用 wc 命令。

代码:

void count_lines() {
    int p;
    p=fork();
    if(p == 0) {
        char* args[] = {"./wc","1.txt",NULL};
        execv("./wc",args);
        perror(execv);
        exit(0);
    }

    printf("waiting for child\n");
    wait(NULL);
    }

除非您的当前目录中有二进制文件,否则 ./wc 将不起作用。由于要使用 wc 命令,请使用它的路径:

int p;
p=fork();

if(p == 0) {
    char* args[] = {"wc","1.txt",NULL};
    execv("/usr/bin/wc",args);
    perror("execv");
    exit(0);
}

或者您可以使用 execvp 让它在 PATH 中搜索 wc:

int p;
p=fork();

if(p == 0) {
    char* args[] = {"wc","1.txt",NULL};
    execvp("wc",args);
    perror("execvp");
    exit(0);
}

您需要更正以下两行代码。始终提供文件位置的完整路径。如果命令执行不成功,您需要检查文件位置的访问权限,包括执行文件或命令的权限:-

char* args[]={"wc","-l","/full/path/1.txt",NULL};
execv("/usr/bin/wc",args);

通常所有 unix/Linux 命令都应该在目录位置 /usr/bin/ 中。要获取命令的完整路径,请尝试如下所示:-

which command #here command can be wc, ls etc. so try which wc