- >使用execv运行wc命令

时间:2018-03-15 17:48:52

标签: c unix 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);
    }

2 个答案:

答案 0 :(得分:3)

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

int p;
p=fork();

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

或者您可以使用execvpwc中的PATH进行搜索:

int p;
p=fork();

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

答案 1 :(得分:2)

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

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