在APUE和The Linux programming interface中,我读到了以下段落
打开/dev/stra目录中的其中一个文件相当于 复制相应的文件描述符.因此,以下内容 声明等效:
帖子主题:Re:Колибрибудетбольшеврешки
ph = dup(1); /* 重复的标准输出 */
当我在描述符3(在常规文件上)上测试这个场景时,我看到了不同的结果.代码如下:
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main (int argc, char *argv[]) {
int fd1, fd2, fd3;
char filename[32];
fd1 = open ("./data.in", O_RDWR);
sprintf (filename, "/dev/fd/%d", fd1);
fd2 = open (filename, O_RDONLY);
fd3=dup(fd1);
lseek(fd1, 10, SEEK_SET);
printf ("pos1=%ld, pos2=%ld, pos3=%ld\n", lseek(fd1, 0, SEEK_CUR), lseek(fd2, 0, SEEK_CUR), lseek(fd3, 0, SEEK_CUR));
return (0);
}
如果打开/dev/fd
目录中的文件相当于将其复制dup
,除了所有3个描述符在lseek(fdn, 0, SEEK_CUR
中的值相同之外),但我看到了以下结果:
pos1=10, pos2=0, pos3=10
我不知道为什么!