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

问题描述 投票:0回答:1
#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在文件夹1中,我希望它在文件夹2中执行ls并获取结果。

不是特定于“ ls”的东西,但通常适用于所有命令。

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

c shell ubuntu exec popen
1个回答
0
投票

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

myexecute folder2 'ls -l' 

myexecute 'another folder' 'ls' 

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

使用chdir,您可以更改当前工作目录。可以在循环中读取命令的输出并将其输出到stdout。最后,使用pclose,您将等待关联的进程完成,甚至会返回已执行命令的退出状态,以防万一。

您经过稍微修改的代码可能看起来像这样:

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.