我在C中编写了一个简单的I / O回显程序来测试更大的真实程序的问题.这里,linux FD重定向不起作用.
回声程序(又名a.out)是:
#include <stdio.h>
int main(int argc, char **argv) {
char buff[10];
while (1) {
if (fgets(buff, 10, stdin) == NULL) break;
printf("PRINT: %s \n", buff);
}
}
从Bash,我运行它:
$mkfifo IN OUT
$# this is a method to keep the pipes IN and OUT opened over time
$while :; do read; echo Read: $REPLY >&2; sleep 1; done <OUT >IN &
$a.out >OUT <IN &
$echo xyz >IN
并且没有产生输出:Bash while循环无法从OUT读取.
让我们将这个a.out与cat进行比较,而cat则按预期工作:
$mkfifo IN OUT
$while :; do read; echo Read: $REPLY >&2; sleep 1; done <OUT >IN &
$cat >OUT <IN &
$echo xyz >IN
Read: xyz
最后一行打印在stderr的控制台上.
cat的输出,与a.out不同,能够穿过OUT并在循环时到达Bash,然后将其打印在控制台上.
a.out有什么问题?
解决方法:
尝试在printf(…)之后添加fflush(stdout).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。