首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件描述符自动更新到文件末尾

文件描述符自动更新到文件末尾
EN

Stack Overflow用户
提问于 2022-09-06 18:37:23
回答 1查看 74关注 0票数 2

考虑一下这个例子(为了简洁起见,我省略了标题和错误检查):

代码语言:javascript
复制
int main() {
    int fd;

    fd = open("dump", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR);

    if ( fork() > 0 ) {
        sleep(1);
        printf("Current offset: %li\n", (long)lseek(fd, 0, SEEK_CUR);
        write(fd, "zz", 2);
    }
    else {
        write(fd, "hello\n", 6);
    }

    close(fd);
    return 0;
}

这个程序(在Linux上运行)打印

代码语言:javascript
复制
Current offset: 6

到航站楼

代码语言:javascript
复制
hello
zz%

dump (表示缺少换行符的%)。

为什么dump不包含

代码语言:javascript
复制
zzllo

我的想法是,在fork之后,对于同一个进程有两个文件描述符,但是每个文件描述符都有自己的偏移量。为什么写到一个描述符会影响另一个描述符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 18:52:05

进程有自己的文件描述符,但是这些进程充当指向共享打开文件描述的引用计数指针(为每个open创建一个单独的开放文件描述)。共享开放文件描述是允许,例如shell脚本进行如下操作的原因。

代码语言:javascript
复制
(
 /usr/bin/echo hello
 /usr/bin/echo world 
) > some_file

some_file同时包含helloworld,而不使用后者覆盖前者(就像他们(没有特别的努力)一样,如果他们写信给终端,就不会覆盖对方)。

它还允许应用程序修改终端设置(stty)、实用程序(如flock (在共享文件描述中设置锁)以及其他可能的东西)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73626470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档