How to check if a file is being edited? (Ruby)
I am writing some code to write out an email to a file, let you edit it in your own editor, and when you're done you can tell my code to carry on. I'd like to have it catch the common error where you still have the file open, and therefore might not have saved it.
My first attempt was to try to obtain an exclusive lock on the file (using File.flock) but that never caught it. A bit more googling suggests that this is a hard problem.
The best suggestion appear开发者_StackOverflow中文版s to be to look for common lock files, eg vi foo
will make .foo.swp
while joe foo
will make .#foo
.
So the question is, is there a better way to tell if a file is being edited? And if not, is there a list of all common lock file naming conventions?
Use system("#{ENV['EDITOR']} #{path})
to call up their editor of choice. The program will continue when that process ends, ie, they exit their editor.
If you don't trust them to exit their editor, you could fork off a process to watch the file's modification time, and queue off the rest of the program when the modification time changes (though this may happen multiple times if they save incrementally).
lsof gets a list of open files somehow, possibly by searching in /proc/[pid]/, as well as the approaches you suggest for finding checking for swap/temp files.
精彩评论