LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - General (http://www.linuxquestions.org/questions/linux-general-1/)
-   -   File Opened by some application (http://www.linuxquestions.org/questions/linux-general-1/file-opened-by-some-application-636143/)

gaurav84 04-17-2008 11:42 PM

File Opened by some application
 
Hello All ,

I need to know , if some file is used by some application in Linux.

Its like , I need to make a function in C , which checks whether a file is opened or not by some application.

I can browse ,through /proc/*PID*/fd/
and collect the data from there .

but In case of txt file , there is no link to the file in the fd folder of that PID .

Any Idea , how to deal with txt file in such a case.
or is there some other way ,


-Gaurav

BugZRevengE 04-18-2008 12:54 AM

lsof is your friend
By default it will show all open files, but you can get open files for a user:
lsof -u alowe (showing all open files for alowe)
or a process
lsof -p 123,456 (showing all open files for process numbers 123 and 456)
or a particular file
lsof /home/alowe/myfile (shows processes with /home/alowe/myfile open)

I do not think this always works for data files, as some applications only open the file when they want to read from or write to the file, closing the file while the user edits it... so on open, they open the file, then read, then close the file, after that when the user chooses to save the file, the process opens the file, writes out the data, and closes it.
If a file should be only opened and edited by one user the process should probably lock the file while the process runs.
I know my text editor (Kate) will open the file, and I can open it in another editor, and kate will warn me that another process has changed the file (and give me alist of options (replace, save as, drop changes), but it uses timestamps, etc to determine this, and nothing stops the second process from editing the file.
I mention these last notes because you mention text files, and they are probably not under the /proc file system because they are not technically open, just being edited by a process, but not in use.

Hope this helps

gaurav84 04-18-2008 01:00 AM

So , what can we do for a txt/xml file specially to know , whether some process have opened it or not

BugZRevengE 04-18-2008 01:29 AM

I don't think you can actually tell if a process is editing a memory buffered copy of a file, as it has not marked the file as locked and has not left the file open, it is technically not open or in use, just the memory copy of the data is being used.

Sorry, and I could (Hopefully) be wrong, but I doubt it...


All times are GMT -5. The time now is 06:02 AM.