小编Hed*_*iri的帖子

C 系统(“bash”)忽略标准输入

我有一个文件输入:

$ cat input
1echo 12345
Run Code Online (Sandbox Code Playgroud)

我有以下程序

第一个版本

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

int main() {
  system("/bin/bash -i");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在如果我运行它,

$ gcc -o program program.c
$ ./program < input
bash: line 1: 1echo: command not found
$ exit
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作。

现在我想忽略文件输入的第一个字符,所以我getchar()在调用system().

第二版:

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

int main() {
  getchar();
  system("/bin/bash -i");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,bash 立即退出,就像没有输入一样。

$ gcc -o program program.c
$ ./program < input
$ exit
Run Code Online (Sandbox Code Playgroud)

问题为什么 bash 没有收到输入?

注意 我尝试了一些东西,我发现为主进程分叉一个新孩子可以解决问题:

第三版

#include …
Run Code Online (Sandbox Code Playgroud)

linux bash c

7
推荐指数
2
解决办法
1861
查看次数

标准输入无缓冲

我正在执行一个带有 stdin 重定向的程序:

 $ prog < f
Run Code Online (Sandbox Code Playgroud)

在这种情况下,标准输入被完全缓冲。

有没有技巧可以使它无缓冲或行缓冲?

编辑。

不修改程序源代码(即使用setvbuf())

linux buffer stdin

3
推荐指数
2
解决办法
2494
查看次数

标签 统计

linux ×2

bash ×1

buffer ×1

c ×1

stdin ×1