Monday, May 6, 2024
11
rated 0 times [  11] [ 0]  / answers: 1 / hits: 33291  / 3 Years ago, tue, september 28, 2021, 11:01:18

I'm looking for a command line function or c function that will let me know if a file is open/in use by something.



lsof and fuser do tell this, but they provide a lot of other info which results in taking up to 300ms in some situations (like when i use this code on MAC OS X, I'm devving for Linux and OS X) (I have a windows solution that takes 5ms so I'm trying to find something in Unix that also is very quick, and just returns true or false if file is in use)


More From » command-line

 Answers
2

If you are using this as a lock, it will not work as neither lsof or fuser prevent race conditions.



The basic process that lsof does is trawl through all processes /proc/*/fs looking for open file descriptors. This is going to take time no matter what you do.



You can do this yourself, but it is not likely to be any faster as you have to check for every open process on the system.



If what you are doing is time critical, figure out another way to do it.




  • If you control the file through a program that you wrote; use a lock file.

  • If you are running some command that operates on the file, look and see what documentation that command/program offers and see if it can't make a lockfile. Failing that, see if it can't make a file with its PID inside it. Then you can look at /proc/<PID>/fs to see if your file is currently open or not. Looking at only one processes open file descriptors will be much faster then mapping across all of them.

  • Otherwise in order to help you I am going to need more information about what you are doing.






You gave more information in a comment that you want to determine if Firefox is running on a given system. The best way to do this is to look for Firefox's lock files. These are stored in default locations specified on the Mozilla wiki.



For example, on linux, have your program do the following:




  • open up the ~/.mozilla/firefox/ directory.

  • List all directories, filtering for directories ending in .default. (I think all profiles end with .default, if not just crawl into every directory.)

  • In each directory above, look for the existence of a file named lock or .parentlock. If you see one or both files, Firefox is open.



This algorithm ought to execute faster than what you do on windows currently.


[#23095] Wednesday, September 29, 2021, 3 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
ardingiba

Total Points: 497
Total Questions: 95
Total Answers: 109

Location: Gabon
Member since Sat, Jan 15, 2022
2 Years ago
;