FIFO中的数据一直为0,求解释

风去沙来 2012-04-13 05:28:18
在网络编程第二卷的习题4.8中,代码程序:

int
main(int argc, char **argv)
{
int fd[2];
char buff[7] = "thisis";
struct stat info;

if (argc != 2)
err_quit("usage: test1 <pathname>");

Mkfifo(argv[1], FILE_MODE);
fd[0] = Open(argv[1], O_RDONLY | O_NONBLOCK);
fd[1] = Open(argv[1], O_WRONLY | O_NONBLOCK);

/* 4check sizes when FIFO is empty */
Fstat(fd[0], &info);
printf("fd[0]: st_size = %ld\n", (long) info.st_size);
Fstat(fd[1], &info);
printf("fd[1]: st_size = %ld\n", (long) info.st_size);

Write(fd[1], buff, sizeof(buff));

/* 4check sizes when FIFO contains 7 bytes */
Fstat(fd[0], &info);
printf("fd[0]: st_size = %ld\n", (long) info.st_size);
Fstat(fd[1], &info);
printf("fd[1]: st_size = %ld\n", (long) info.st_size);

Close(fd[0]);
Close(fd[1]);
Unlink (argv[1]);
exit(0);
}
运行结果为:
fd[0]: st_size = 0
fd[1]: st_size = 0
fd[0]: st_size = 0
fd[1]: st_size = 0

请问写入了7个字节后,为什么 还是0呢?
...全文
1176 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ecsape 2012-04-17
  • 打赏
  • 举报
回复
引用 3 楼 的回复:

fifo本身的大小就是0,它只有缓冲区。并不是它的数据是0.

int num=Write(fd[1], buff, sizeof(buff));
num打印下看看,只要不是0,就说明写进去了。
风去沙来 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你仔细检查了你对你写的文件有写的权限吗?
[/Quote]

肯定有的呀
wqkjj 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

fifo本身的大小就是0,它只有缓冲区。并不是它的数据是0.
[/Quote]
+1
FIFO不是普通文件。
root_jli 2012-04-13
  • 打赏
  • 举报
回复
fifo本身的大小就是0,它只有缓冲区。并不是它的数据是0.
惬意 2012-04-13
  • 打赏
  • 举报
回复
你仔细检查了你对你写的文件有写的权限吗?
风去沙来 2012-04-13
  • 打赏
  • 举报
回复
顶一下

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧