从用于运行shell脚本的excl获取输出
您好,我想获得关于从脚本中获取输出的建议,我应该从excl调用中执行该脚本:从用于运行shell脚本的excl获取输出,c,linux,shell,execl,C,Linux,Shell,Execl,您好,我想获得关于从脚本中获取输出的建议,我应该从excl调用中执行该脚本: void getCurrentFSLSMode(char* const in_fsls_directory, enum Mode* out_mode) { int link[2]; pid_t pid; char buffer[MAX_PATH_STR_LENGTH]; char command_buffer[MAX_COMMAND_STR_LENGTH]; char script_name[]
void getCurrentFSLSMode(char* const in_fsls_directory, enum Mode* out_mode) {
int link[2];
pid_t pid;
char buffer[MAX_PATH_STR_LENGTH];
char command_buffer[MAX_COMMAND_STR_LENGTH];
char script_name[] = "/scpt.sh\0";
if (pipe(link)==-1)
printf("pipe");
if ((pid = fork()) == -1)
printf("fork");
if(pid == 0) {
dup2 (link[1], STDOUT_FILENO);
close(link[0]);
close(link[1]);
command_buffer[0] = '\0';
strcat(command_buffer, in_fsls_directory);
strcat(command_buffer, script_name);
printf("%s\n", command_buffer);
execl("/bin/sh", "sh", command_buffer, (char *)0);
} else {
close(link[1]);
int nbytes = read(link[0], buffer, sizeof(buffer));
buffer[nbytes - 1] = '\0';
// LAZY COMPARISON
// not algorithm name, it's just what im doing.
//
printf("DBG : %s %d\n", buffer, nbytes);
if (buffer[0] == 'G') {
*out_mode = K;
} else if (buffer[0] == 'K') {
*out_mode = G;
} else {
*out_mode = CLEARED;
}
wait(NULL);
}
}
如果我在运行二进制文件时使用相同的代码,我就能读出它的输出,
但是,当我尝试执行上面的脚本时,我只能读取发出的命令
例如:
excl("binary command to run");
read(output)
output == "correct output"
但如果
excl("shell script to run");
read(output)
output == "shell script to run"
这是为什么?您已经检查了
read
调用是否成功?fork
调用是否成功?“<代码> ExcLe>代码>调用成功了吗?顺便考虑一下,您的脚本使用的是STDRR而不是STDOUTOh,如果脚本或命令产生的输出比<代码> Max PaseStuthStReals字符还要多?调用成功了,当我把应用程序输出到管道时,我看到了它。我调用的脚本只是执行了一个二进制应用程序。我检查了你的代码,但仍然无法得到你想要做的。您能否显示可以执行的成功二进制运行版本的完整代码,以及脚本代码的错误运行版本的完整代码?您是否已检查read
调用是否成功?fork
调用是否成功?“<代码> ExcLe>代码>调用成功了吗?顺便考虑一下,您的脚本使用的是STDRR而不是STDOUTOh,如果脚本或命令产生的输出比<代码> Max PaseStuthStReals字符还要多?调用成功了,当我把应用程序输出到管道时,我看到了它。我调用的脚本只是执行了一个二进制应用程序。我检查了你的代码,但仍然无法得到你想要做的。您能否显示可以执行的成功二进制运行版本的完整代码,以及脚本代码的错误运行版本的完整代码?而且betrer也会粘贴你的脚本