Prevent a process from opening a file more than once

rohan puri rohan.puri15 at gmail.com
Wed Sep 28 00:19:44 EDT 2011


On Wed, Sep 28, 2011 at 6:17 AM, Venkatram Tummala
<venkatram867 at gmail.com>wrote:

> On Tue, Sep 27, 2011 at 5:40 PM, Jeff Haran <jharan at bytemobile.com> wrote:
>
>>
>>
>> From: kernelnewbies-bounces at kernelnewbies.org
>> [mailto:kernelnewbies-bounces at kernelnewbies.org] 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
>> <mulyadi.santosa at gmail.com> wrote:
>> Hi :)
>>
>> On Wed, Sep 28, 2011 at 06:56, Venkatram Tummala
>> <venkatram867 at gmail.com> 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
> Kernelnewbies at kernelnewbies.org
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20110928/8fd2ee42/attachment.html 


More information about the Kernelnewbies mailing list