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;
}
#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;
}