逐行读取FIFO文件的内容

3
我是Unix编程的绝对新手,我需要制作一个程序,从标准输入读取一些命令,然后再执行这些命令的另一个程序。我必须使用fifo来建立这两个程序之间的通讯。我的问题是:如何从一个大小不固定的fifo中逐行(一个命令)读取数据?我想使用信号实现一种同步,但我确定有更好的方法。
抱歉,如果这是一个非常基础的问题,因为我对这些东西完全是个新手。
还有,如果我的英语很糟糕,也很抱歉。

我已经开始学习IPC,并且已经制作了涉及连续流或固定大小元素交换的东西。我的主要问题是管理具有不固定长度的不同字符串。然而,我目前正在努力增加自己的知识,但我有非常紧迫的截止日期,这就是为什么我请求帮助的原因。 - cifz
1
代码比语言更具表现力。如果你尝试过某些东西,请发布一小段代码,这样更容易帮助你。 - Aftnix
现在,不幸的是,我没有我的电脑。然而,我对这个特定问题一无所知,因为我目前不知道如何解决它。我所有关于IPC的其他东西(除了我之前告诉你的)都在正常工作。不过明天我会尝试一些方法并在这里发布! - cifz
man realloc. 分配一个固定大小的缓冲区并读取数据。如果在到达行尾之前到达缓冲区末尾,则使缓冲区变大。 - William Pursell
1个回答

3

我猜你使用了read()来读取数据?只需要使用fgets()函数,让stdlib处理缓冲即可。如果你使用的是open()而不是fopen(),那么你需要先用fdopen()函数获取你的FILE结构体。代码示例如下:

FILE * pFile;

char mystring [100];

pFile = fopen("myfifo" , "r");

if (pFile == NULL)
{   perror ("Error opening fifo");
    exit(1);
}

while (fgets(mystring, 100, pFile) != NULL)
    puts(mystring);

fclose (pFile);

很酷,谢谢。但是如果我必须使用系统调用(我的意思是直接使用read/open/write等),该怎么办?我想逐个字符读取连续的流,并在读取'\0'时将这些字符分开作为字符串?不过还是非常感谢,如果允许我使用这些函数,我会再问的。 - cifz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接