2013-02-14 115 views
1

如果我这样做的:关于系统程序:打开UNIX文件系统

fd2 = open ("file", O_RDONLY); 

然后

fd1 = open ("file", O_RDONLY); 
在同一进程

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

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

谢谢!

+3

为什么不简单地测试它? – koopajah 2013-02-14 16:13:53

+1

@koopajah:因为在一个系统上的行为并不一定告诉你它是如何*一般行为。当然,这是值得尝试的,但是测试的结果并不是确定性的。 – 2013-02-14 16:54:30

回答

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)); 
} 

这在我的Mac OS 10.5箱和一些对科学的Linux机器在功能上相同,则返回

$ ./a.out 
3 4 
FD1 position = 0 
FD2 position = 2888 
FD1 position = 0 

(区别仅在大小为/etc/passwd)。

你会注意到你回来的数字不同fd s,他们每个人都有自己的位置光标。