LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1133|回复: 7

UNIX环境高级编程 中一个不懂的地方

[复制链接]
发表于 2006-11-30 00:16:33 | 显示全部楼层 |阅读模式
3-1的例子
#include "apue.h"
int main (void)
{
    if(lseek(STDIN_FILENO,0,SEEK_CUR) == -1)
        printf("cannot seek\n");
    else
        printf("seek OK\n");
    exit(0);
}

假设编译在./a.out
执行情况:
$ ./a.out < /etc/motd
seek OK
$ cat < /etc/motd | ./a.out
cannot seek

第一条shell好理解
第二条是不是理解为将/etc/motd 通过管道让./a.out处理 再通过cat输出
那为什么和第一个结果不一样呢?
还是理解为先cat < /etc/motd  将要输出的结果通过管道让./a.out处理
谢谢解答
发表于 2006-11-30 01:20:00 | 显示全部楼层
这个例子说明的问题是,匿名管道不可以seek
你的第二个理解是对的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-30 13:51:33 | 显示全部楼层

谢谢

谢谢  那么用mkfifo创建的有名管道可以seek么?
回复 支持 反对

使用道具 举报

发表于 2006-11-30 18:01:14 | 显示全部楼层
Post by zhllg
这个例子说明的问题是,匿名管道不可以seek
你的第二个理解是对的

第二个理解是错吧,是将/etc/motd教给cat显示,再将显示的结果通过a.out处理
回复 支持 反对

使用道具 举报

发表于 2006-11-30 18:32:41 | 显示全部楼层
你说的和楼主说的区别在哪里?
难道你认为“cat < /etc/motd”不是将“/etc/motd教给cat显示”?
回复 支持 反对

使用道具 举报

发表于 2006-11-30 18:35:04 | 显示全部楼层
Post by 疯子8972
谢谢  那么用mkfifo创建的有名管道可以seek么?

应该也是不可以的
你看书查证一下
内容不存在于磁盘上的文件,seek有何意义呢?
回复 支持 反对

使用道具 举报

发表于 2006-11-30 19:02:56 | 显示全部楼层
Post by zhllg
你说的和楼主说的区别在哪里?
难道你认为“cat < /etc/motd”不是将“/etc/motd教给cat显示”?
第二条是不是理解为将/etc/motd 通过管道让./a.out处理 再通过cat输出

这么理解难道是正确的??
回复 支持 反对

使用道具 举报

发表于 2006-11-30 19:27:38 | 显示全部楼层
呼唤理解能力
注意是第二理解,第二条的第二个理解
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表