Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 多进程上的文件_Linux_File_Operating System_Process - Fatal编程技术网

Linux 多进程上的文件

Linux 多进程上的文件,linux,file,operating-system,process,Linux,File,Operating System,Process,如果我的一个进程打开了一个文件,比如说仅用于读取,O.s是否保证在我读取时不会有其他进程在其上写入 将读取过程保留为旧文件版本的第一部分和新文件版本的第二部分,使数据完整性受到质疑 我说的不是没有seek的管道,而是在常规文件上使用seek选项的管道(至少在仅使用一个进程打开时)。不,如果打开一个文件,其他进程可以写入它,除非使用锁 在Linux上,您可以通过以下方式在文件上添加建议锁: #include <sys/file.h> ... flock(file_descripto

如果我的一个进程打开了一个文件,比如说仅用于读取,O.s是否保证在我读取时不会有其他进程在其上写入 将读取过程保留为旧文件版本的第一部分和新文件版本的第二部分,使数据完整性受到质疑


我说的不是没有seek的管道,而是在常规文件上使用seek选项的管道(至少在仅使用一个进程打开时)。

不,如果打开一个文件,其他进程可以写入它,除非使用锁

在Linux上,您可以通过以下方式在文件上添加建议锁:

#include <sys/file.h>

...

flock(file_descriptor,LOCK_EX); // apply an advisory exclusive lock
#包括
...
flock(文件描述符,锁)应用建议独占锁

否,其他进程可以在您读取文件时更改文件内容。尝试运行“man fcntl”并忽略“咨询”锁部分;这些是“可选”锁,进程只需要在需要时注意它们。相反,寻找(唉,非POSIX)“强制”锁那些可以保护您免受其他程序的影响。尝试读取锁定。

任何可以打开文件进行写入的进程都可以对其进行写入。写操作可以与您自己的写操作同时发生,从而导致(可能)不确定的状态

作为应用程序编写者,您有责任确保不发生坏事。在我看来,强制锁定不是一个好主意

更好的办法是,不要向不想写入文件的进程授予写入权限

如果几个进程打开一个文件,它们将有独立的文件指针,因此它们可以seek(),而不会相互影响


如果一个文件是由一个线程程序(或一个与另一个共享其文件描述符的任务,更一般地说)打开的,那么文件指针也是共享的,因此您需要使用另一种方法来访问该文件,以避免争用条件导致混乱-通常是pread、pwrite、,或分散/聚集函数readv和writev。

除非编写应用程序也同意使用,否则建议锁没有用处。如果您确信所有相关方都注意到了建议锁,那么建议锁就足够了。另外,如果一个进程在等待释放锁时阻塞,请注意潜在的死锁问题。强制锁并不总是可能的。例如,您可能必须使用“-o mand”运行mount并更改文件上的某些标志。在我看来,强制锁不是一个理想的功能:)同意!更好的应用程序设计会更好。但是,如果他必须保护一个文件不受他无法控制的读者的攻击,他们是唯一的出路。