关于系统例程:unix文件系统的OPEN

时间:2013-02-14 16:12:47

标签: c unix

如果我这样做:

fd2 = open ("file", O_RDONLY);

然后

fd1 = open ("file", O_RDONLY);

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

此外,即使我打开两个READONLY ..文件系统是否在File表中创建了两个条目?还是只有一个? (不是Inode表)

谢谢!

1 个答案:

答案 0 :(得分: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盒子和科学Linux盒子上功能完全相同的东西(仅/etc/passwd的大小不同)。

你会注意到你在数字上有不同的fd,并且它们各自都有自己的位置光标。

相关问题