我正在尝试创建一个简单的用户空间程序,在读取文件时动态生成文件内容,就像虚拟文件系统一样。我知道有像FUSE这样的程序,但是对于我想做的事情,它们看起来有点沉重。
例如,一个简单的计数器实现看起来像:
$ cat specialFile
0
$ cat specialFile
1
$ cat specialFile
2
我当时认为specialFile
可能是一个命名管道,但我运气不好。我也在想select
可能会有所帮助,但我不确定如何使用它。我错过了一些基本概念吗?
#include <stdio.h>
int main(void)
{
char stdoutEmpty;
char counter;
while (1) {
if (stdoutEmpty = feof(stdout)) { // stdout is never EOF (empty)?
printf("%d\n", counter++);
fflush(stdout);
}
}
return 0;
}
然后用法就像:
shell 1 $ mkfifo testing
shell 1 $ ./main > testing
shell 2 $ cat testing
# should be 0?
shell 2 $ cat testing
# should be 1?
答案 0 :(得分:0)
您需要使用FUSE。 FIFO不起作用,因为你的程序不断将内容推送到stdout(在这种情况下cat永远不会停止),或者它关闭stdout,在这种情况下你显然不能再写它了。