Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Ruby 在加载/请求期间锁定文件 在文件加载期间-ed/需要-d,文件是否被锁定,无法写入 如果没有,我如何在加载期间以独占方式锁定文件以防止写入/要求_Ruby_File_Locking - Fatal编程技术网

Ruby 在加载/请求期间锁定文件 在文件加载期间-ed/需要-d,文件是否被锁定,无法写入 如果没有,我如何在加载期间以独占方式锁定文件以防止写入/要求

Ruby 在加载/请求期间锁定文件 在文件加载期间-ed/需要-d,文件是否被锁定,无法写入 如果没有,我如何在加载期间以独占方式锁定文件以防止写入/要求,ruby,file,locking,Ruby,File,Locking,如果是的话,可能应该使用,但我不知道第一个问题的答案,也不知道如何将它与加载/要求相结合。当打开文件时,您唯一的保护是,如果文件被删除,从技术上讲与文件系统断开链接并孤立,您仍然可以读取内容。从那时起,关闭该文件将丧失对该文件的任何访问权。这就是它在POSIX类型系统上的工作原理。在任何情况下,Windows都可能不同 当您的进程试图完成它的任务时,没有什么可以阻止另一个进程过度写入文件的一部分或截断它 请记住File#flock只是一种礼貌的请求锁定的方式,除非将要操作文件的另一个进程是礼貌的

如果是的话,可能应该使用,但我不知道第一个问题的答案,也不知道如何将它与
加载
/
要求

相结合。当打开文件时,您唯一的保护是,如果文件被删除,从技术上讲与文件系统断开链接并孤立,您仍然可以读取内容。从那时起,关闭该文件将丧失对该文件的任何访问权。这就是它在POSIX类型系统上的工作原理。在任何情况下,Windows都可能不同

当您的进程试图完成它的任务时,没有什么可以阻止另一个进程过度写入文件的一部分或截断它

请记住
File#flock
只是一种礼貌的请求锁定的方式,除非将要操作文件的另一个进程是礼貌的并进行检查,否则您无法保证文件的状态。进程可以忽略这一点,并在没有警告的情况下损坏您的文件

确保没有人接触您的文件的唯一方法是将其复制到私有的
/tmp
目录,测试复制的内容是否正确,然后从那里读取。这是一件极其偏执的事情,所以我希望你在走这条路之前有一个令人信服的理由


如果您可以控制访问文件的所有进程,使它们成为行为良好的公民,并对文件使用一致的锁定机制,那么您可能就没事了。如果不是这样,您可能需要一个主进程,它使用某种IPC信号以独占方式授予对文件的访问权。

当您需要一个文件时进行的一组系统调用是ruby,这表明ruby没有获得该文件的锁,您可以在安装了
strace
的任何linux系统上使用
strace ruby-r set-e'set.new'
来验证这一点,因此您的建议可能是唯一的方法