1

我正在尝试制作一个简单的用户空间程序,该程序在读取文件时动态生成文件内容,就像虚拟文件系统一样。我知道有像 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?
4

1 回答 1

0

您需要使用保险丝。FIFO 不起作用,因为要么您的程序不断将内容推送到标准输出(在这种情况下 cat 永远不会停止),要么它关闭标准输出,在这种情况下您显然不能再写入它了。

于 2013-06-05T19:22:36.013 回答