1

如果我做:

fd2 = open ("file", O_RDONLY);

进而

fd1 = open ("file", O_RDONLY);

在相同的过程中。我得到两个不同的文件指针吗?我的意思是,我可以用 fd2 将“光标”移动 100 个字节,而 fd1 的光标将保持为零吗?

此外,即使我同时打开 READONLY .. 文件系统是否会在 File 表中创建两个条目?还是只有一个?(不是索引节点表)

谢谢!

4

1 回答 1

2

注意:初始版本有一个影响结果的复制和粘贴错误。现在修好了。

在试一试的基础上,我写了

#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,它们每个都有自己的位置光标。

于 2013-02-14T16:31:12.817 回答