On Wed, Sep 28, 2011 at 6:17 AM, Venkatram Tummala <[email protected]>wrote:
> On Tue, Sep 27, 2011 at 5:40 PM, Jeff Haran <[email protected]> wrote: > >> >> >> From: [email protected] >> [mailto:[email protected]] On Behalf Of Venkatram >> Tummala >> Sent: Tuesday, September 27, 2011 5:31 PM >> To: Mulyadi Santosa >> Cc: kernelnewbies >> Subject: Re: Prevent a process from opening a file more than once >> >> On Tue, Sep 27, 2011 at 5:22 PM, Mulyadi Santosa >> <[email protected]> wrote: >> Hi :) >> >> On Wed, Sep 28, 2011 at 06:56, Venkatram Tummala >> <[email protected]> wrote: >> > Hi All, >> > I have a simple device driver which creates a /dev/XYZ file. I need to >> > prevent a process from opening the file more than once. However, >> multiple >> > processes can open the file simultaneously. Is there any any elegant >> way to >> > do this other than checking all opened files in the process ? >> Uhm, keep a reference count and increment it on every file open in >> your module? How does that sound? >> Well, which refcount should i use? I can't use the refcount in the file >> object as the file objects passed to me are different each time the file >> is opened in the process. >> >> When you say "I need to prevent a process from opening the file more >> than once.", do you mean a single process opening the file, closing it >> and then opening it again would be disallowed? > > No. If the file is already opened in the process, the process shouldn't be > allowed to open the file again. It is fine if the process opens, closes & > then opens the file again. > >> Or do you mean that a >> single process opening the file, keeping it open and then opening it >> again under another fd would be disallowed? >> > Yes, this is what i am looking for. > >> >> How about multiple threads within the same process? Are they treated as >> the same process by these rules? >> > Yes. Threads are treated as the same process. So, if one thread has the > file already opened, another thread in the same process shouldn't be able to > open it. > > Venkat > > > _______________________________________________ > Kernelnewbies mailing list > [email protected] > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > > Hi Venkatram, I agree with Mulyadi, you maintain a static global variable (int), in device_open() -> if(var) return -EBUSY var++ & in device_release() -> var-- I think this should do the job. Regards, Rohan Puri
_______________________________________________ Kernelnewbies mailing list [email protected] http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
