gpt4 book ai didi

c - 关于系统例程: OPEN of the unix file system

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:25 35 4
gpt4 key购买 nike

如果我这样做:

fd2 = open ("file", O_RDONLY);

然后

fd1 = open ("file", O_RDONLY);

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

此外,即使我以 READONLY 方式打开两者。文件系统是否会在 File 表中创建两个条目?还是只有一个? (不是 inode 表)

谢谢!

最佳答案

注意:初始版本存在影响结果的复制和粘贴错误。现已修复。

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

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

关于c - 关于系统例程: OPEN of the unix file system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14879127/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com