Ubuntu C代码如何在另一个文件夹中执行命令

Ubuntu C code how to execute command in another folder

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

int main()
{
    char *buffer = malloc(1024);
    FILE* f = popen("ls", "r");
    int byteReads = fread(buffer, 1, 1024, f);
    fclose(f);
    printf("%s\n", buffer);

    return 0;
}

有 2 个文件夹 ./parent/folder1./parent/folder2./main在folder1中,我想让它在folder2中执行ls得到结果。

不是 "ls" 特有的东西,但通常适用于任何命令。

如何使用 popen() 来实现?还是我必须使用其他命令?

您可以像在问题中一样使用 popen。您可以将要执行的 cmd 作为参数传递给程序调用,例如如果您的程序名为 myexecute,则命令行调用将如下所示:

myexecute folder2 'ls -l' 

myexecute 'another folder' 'ls' 

如果参数中包含空格,请注意单引号以获取参数。

使用chdir您可以更改当前工作目录。命令的输出可以循环读取并输出到标准输出。 最后,使用 pclose,您将等待相关进程完成,它甚至会 return 已执行命令的退出状态,以防您感兴趣。

您的代码稍作修改可能如下所示:

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

int main(int argc, char *argv[]) {
    if(argc != 3) {
        fprintf(stderr, "usage: %s '<dir>' '<cmd>'\n", basename(argv[0]));
        return EXIT_FAILURE;
    }
    if(chdir(argv[1]) != 0) {
        perror(argv[1]);
        return EXIT_FAILURE;
    }
    FILE *f = popen(argv[2], "r");
    if (!f) {
        perror("popen failed");
        return EXIT_FAILURE;
    }
    char buf[1024];
    while (fgets(buf, sizeof(buf), f)) {
        printf("%s", buf);
    }
    if (pclose(f) != 0) {
        perror("pclose failed");
    }
    return EXIT_SUCCESS;
}