分叉服务器,单个文件 - r/w 访问
Forking server, single file - r/w access
我目前正在开发一个分叉服务器,它为客户端提供块级(有一个定义的块大小并检查边界)对文件的读写访问权限。
我正在为每个客户端连接创建一个分支。我知道文件句柄是复制的,因此父进程和子进程都可以访问该文件。我也知道,在一个过程中寻求也会影响其他过程。
所以这是我的问题:
- 如何在前叉
- 中锁定寻找物与其他前叉?互斥体?
- 一个分叉可以写入某些块,而其他分叉正在读取不同的块吗?
- 如果 2 是可能的,如何防止分叉读取当前正在写入的块?
感谢您的帮助:)
使用 lockf()
锁定每个进程中要写入的文件块。
由于要锁定的部分从当前文件偏移量开始,我认为最好在每个进程中单独打开文件,而不是共享相同的文件句柄。这样,您可以在每个过程中寻找,而不会影响其他过程。否则,除了文件锁定之外,您还需要围绕lseek()
进行互斥。
因此,要写入块的代码如下所示:
lseek(fd, block_pos, SEEK_SET);
lockf(fd, F_LOCK, block_size);
write(fd, buf, block_size);
lseek(fd, block_pos, SEEK_SET);
lockf(fd, F_ULOCK, block_size);
如果使用共享文件句柄,则可以使用 fcntl()
在调用中指定的偏移量处设置锁,pwrite()
写入文件中的某个位置,而不会影响文件指针。
相关文章:
- C ++程序编译错误,找不到/访问文件
- 从文件读取,并循环访问文件以写入数组
- 确实可以提高directory_iterator在Windows上按字母顺序访问文件和文件夹
- 如何在 bash 中使用管道在 c++ 中使用 getenv() 访问文件?
- 循环访问文件的每一行
- 无法从另一个函数访问文件范围变量的内容
- 如何访问文件的二进制数据?
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- C++ 写入随机访问文件
- 无法从.cpp访问 .h 文件中的私有成员变量
- boost :: filesystem :: verver()无法访问文件,因为另一个过程正在使用该文件
- 如何在 Qt/C++ 中仅将文件路径作为字符串访问文件
- 如何从 JAVA 程序中访问文件中定义的类.DLL方法
- 如何访问 C 文件中C++公共布尔类成员(进行验证)
- 随机访问文件格式,用于分层组织的二进制文件和文本文件
- 连接到 FTP 服务器并访问文件
- 频繁访问文件映射内存
- 'Good'通过条目维护/更新/访问文件的编程形式
- 访问文件中的单个字符效率低下?(C++)
- wxwidgets类访问文件属性