C++ 每个文件的seek_ptr是否唯一?

C++ 每个文件的seek_ptr是否唯一?,c++,linux,file,unix,C++,Linux,File,Unix,对不起,我没有找到我问题的明确答案 我知道每个文件都有自己的seek_ptr,让我们假设主进程在执行任何称为fork()的操作之前打开了与文件_A的连接 然后分叉进程读取2个字符,这是正确的吗 两个文件的seek_ptr是否都等于2 seek_ptr对于子进程等于2,对于主进程仍然等于0 仅当答案为1时: 如何在记事本中打开两个文件,并且每个文件的指示器/光标位于不同的位置?在Unix中,(pid,fd)充当指向内核的打开文件描述表的指针。当一个进程分叉时,子进程将有一个不同的PID,称之

对不起,我没有找到我问题的明确答案

我知道每个文件都有自己的seek_ptr,让我们假设主进程在执行任何称为fork()的操作之前打开了与文件_A的连接

然后分叉进程读取2个字符,这是正确的吗

  • 两个文件的seek_ptr是否都等于2

  • seek_ptr对于子进程等于2,对于主进程仍然等于0


  • 仅当答案为1时:

    如何在记事本中打开两个文件,并且每个文件的指示器/光标位于不同的位置?

    在Unix中,
    (pid,fd)
    充当指向内核的打开文件描述表的指针。当一个进程分叉时,子进程将有一个不同的PID,称之为
    pid2
    。所以
    (pid2,fd)
    是与
    (pid,fd)
    不同的键。但是,这两个指针实际上指向同一个打开的文件描述:
    fork
    不会fork打开的文件描述本身。因此,它们共享一个偏移量。如果一个过程寻求,它也会影响另一个过程。如果一个进程读取,它也会影响另一个进程


    但是,这两个进程都可以自由调用
    close
    fd
    与现有的打开文件描述分离,然后调用
    open
    创建一个新的打开文件描述,该描述可能引用同一文件。完成此操作后,两个进程将具有不同的打开文件描述,在其中一个进程中查找不会影响另一个进程


    每次成功调用
    open
    都会创建一个新的打开文件描述。

    “完成后,两个进程将有不同的打开文件描述,在其中一个进程中查找不会影响另一个进程。”我感到困惑,因为它们都指向同一个文件(因此文件描述相同)为什么它们不总是共享相同的seek_ptr?@daniel每个打开的文件描述都有自己的偏移量。同一个文件可以有多个不同的打开文件描述。所以同一个文件可以有多个文件描述?这听起来有点奇怪,因为文件描述也包含文件的内容,一个文件可以包含一个内容。@daniel打开的文件描述不包含文件的内容。打开文件描述是进程打开文件时在内核内存中创建的内容。见ok,但u说:“然而,任何一个进程都可以自由调用close,将fd与现有的打开文件描述分离,然后调用open”他真的需要在之前执行close吗?进程不能在类之前打开文件两次吗?每个文件描述符都是唯一的。如果同一个文件在一个进程中打开两次,则有两个指针。但是,由于您在子进程中继承了相同的文件描述符,两个进程都共享它,指针也共享。当然,这在Windows中不是问题,因为Windows不提供fork。