【发布时间】:2026-02-22 03:50:02
【问题描述】:
我需要帮助才能完成以下工作。我需要从 c++ 启动一个 bash 进程,这个 bash 进程需要接受来自 stdin 的输入并按照正常输出到 stdout。
我需要从不同的进程向标准输入写入命令,然后按照上面的方法在 bash 中实际执行,然后我对标准输出的结果感兴趣。
这是我迄今为止尝试过的,但输出对我来说根本没有意义......
if (pipe(pipeBashShell)) {
fprintf(stderr, "Pipe error!\n");
exit(1);
}
if ((pipePId = fork()) == -1) {
fprintf(stderr, "Fork error. Exiting.\n"); /* something went wrong */
exit(1);
}
if (pipePId == 0) { //this is the child process
dup2(pipeBashShell[0], STDIN_FILENO);
dup2(pipeBashShell[1], STDOUT_FILENO);
dup2(pipeBashShell[1], STDERR_FILENO);
static char* bash[] = {"/bin/bash", "-i", NULL};
if (execv(*bash, bash) == -1) {
fprintf(stderr, "execv Error!");
exit(1);
}
exit(0);
} else {
char buf[512];
memset(buf, 0x00, sizeof(buf));
sprintf(buf, "ls\n");
int byteswritten = write(pipeBashShell[1], buf, strlen(buf));
int bytesRead = read(pipeBashShell[0], buf, sizeof(buf));
write(STDOUT_FILENO, buf, strlen(buf));
exit(0);
}
.
上面的结果输出如下:
'(主要) bash:: 找不到命令 gerhard@gerhard-work-pc:~/workspaces/si/si$ gerhard orkspaces/si/si$ gerhard@gerhard-work-pc:~/workspa ....
我试图发送到 bash 的命令是“ls”,它应该给我一个目录列表
我错过了什么吗?
【问题讨论】:
标签: c++ bash redirect stdout stdin