如果我做:
fd2 = open ("file", O_RDONLY);
进而
fd1 = open ("file", O_RDONLY);
在相同的过程中。我得到两个不同的文件指针吗?我的意思是,我可以用 fd2 将“光标”移动 100 个字节,而 fd1 的光标将保持为零吗?
此外,即使我同时打开 READONLY .. 文件系统是否会在 File 表中创建两个条目?还是只有一个?(不是索引节点表)
谢谢!
注意:初始版本有一个影响结果的复制和粘贴错误。现在修好了。
在试一试的基础上,我写了
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[]){
int fd1 = open("/etc/passwd",O_RDONLY);
int fd2 = open("/etc/passwd",O_RDONLY);
printf("%d %d\n",fd1,fd2);
printf("FD1 position = %d\n", lseek(fd1,0,SEEK_CUR));
printf("FD2 position = %d\n", lseek(fd2,0,SEEK_END));
printf("FD1 position = %d\n", lseek(fd1,0,SEEK_CUR));
}
哪个返回
$ ./a.out
3 4
FD1 position = 0
FD2 position = 2888
FD1 position = 0
在我的 Mac OS 10.5 机器上和在 Scientific Linux 机器上功能相同的东西(仅在大小上有所不同/etc/passwd
)。
你会注意到你得到了数字不同fd
的 s,它们每个都有自己的位置光标。