我是Unix编程的绝对新手,我需要制作一个程序,从标准输入读取一些命令,然后再执行这些命令的另一个程序。我必须使用fifo来建立这两个程序之间的通讯。我的问题是:如何从一个大小不固定的fifo中逐行(一个命令)读取数据?我想使用信号实现一种同步,但我确定有更好的方法。
抱歉,如果这是一个非常基础的问题,因为我对这些东西完全是个新手。
还有,如果我的英语很糟糕,也很抱歉。
抱歉,如果这是一个非常基础的问题,因为我对这些东西完全是个新手。
还有,如果我的英语很糟糕,也很抱歉。
我猜你使用了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);
man realloc
. 分配一个固定大小的缓冲区并读取数据。如果在到达行尾之前到达缓冲区末尾,则使缓冲区变大。 - William Pursell