Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > opening things without the O_LARGEFILE flag

Reply
Thread Tools

opening things without the O_LARGEFILE flag

 
 
Athanasios
Guest
Posts: n/a
 
      10-30-2006
Hi everyone,

I am trying to open the /dev/net/tun character device with perl.

In C, I would issue:

open("/dev/net/tun", O_RDWR)

and continue as usual.

However, when I try to use sysopen in perl like

sysopen(TUNNELDEV, "/dev/net/tun", O_RDWR);

from the strace (truss) output I can see that instead it tries to do:

open("/dev/net/tun", O_RDWR|O_LARGEFILE)

which for some VERY strange reason succeeds but the file descriptor is
left in a bad state, so it is really unusable. For anything I try to do
afterwards, I get a

EBADFD (File descriptor in bad state).


As I have come down to the systel call level, there is no other reason
for this problem that I can think of except the O_LARGEFILE flag.
Indeed, a simple C program works quite fine without that flag.

I also have tried to use POSIX:pen but it still adds the flag.

The documentation clearly states that from perl 5.6 and forth, the
O_LARGEFILE will be used whenever possible. But I really need to bypass
this and generate an open system call without it.

Does anyone know any conceivable way to accomplish this? Any help will
be appreciated.

If I should take this question to another group or list more suitable
to get an answer, could you also please indicate that group?

Kind Regards,
Athanasios

(I know, I know, the tun/tap driver may be slightly broken in the
strict sense, but let's leave that outside for a moment.)

 
Reply With Quote
 
 
 
 
Ted Zlatanov
Guest
Posts: n/a
 
      10-31-2006
On 30 Oct 2006, http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:

> The documentation clearly states that from perl 5.6 and forth, the
> O_LARGEFILE will be used whenever possible. But I really need to bypass
> this and generate an open system call without it.
>
> Does anyone know any conceivable way to accomplish this? Any help will
> be appreciated.


While there may be other more appropriate ways, you could use
Inline::C maybe?

Ted
 
Reply With Quote
 
 
 
 
xhoster@gmail.com
Guest
Posts: n/a
 
      10-31-2006
"Athanasios" <(E-Mail Removed)> wrote:
> Hi everyone,
>
> I am trying to open the /dev/net/tun character device with perl.
>
> In C, I would issue:
>
> open("/dev/net/tun", O_RDWR)
>
> and continue as usual.
>
> However, when I try to use sysopen in perl like
>
> sysopen(TUNNELDEV, "/dev/net/tun", O_RDWR);
>
> from the strace (truss) output I can see that instead it tries to do:
>
> open("/dev/net/tun", O_RDWR|O_LARGEFILE)
>
> which for some VERY strange reason succeeds but the file descriptor is
> left in a bad state, so it is really unusable. For anything I try to do
> afterwards, I get a
>
> EBADFD (File descriptor in bad state).
>
> As I have come down to the systel call level, there is no other reason
> for this problem that I can think of except the O_LARGEFILE flag.
> Indeed, a simple C program works quite fine without that flag.


Just to make sure it is absolutely nailed down, does the simple C program
stop working fine if you add the O_LARGEFILE in?


> I also have tried to use POSIX:pen but it still adds the flag.
>
> The documentation clearly states that from perl 5.6 and forth, the
> O_LARGEFILE will be used whenever possible. But I really need to bypass
> this and generate an open system call without it.


Maybe you could compile perl without large file support?

Or write a small C server that will accept socket connections and
proxy /dev/net/tun over the socket.

Xho

--
-------------------- http://NewsReader.Com/ --------------------
Usenet Newsgroup Service $9.95/Month 30GB
 
Reply With Quote
 
Athanasios
Guest
Posts: n/a
 
      10-31-2006

(E-Mail Removed) wrote:
> "Athanasios" <(E-Mail Removed)> wrote:
> > Hi everyone,
> >
> > I am trying to open the /dev/net/tun character device with perl.
> >
> > In C, I would issue:
> >
> > open("/dev/net/tun", O_RDWR)
> >
> > and continue as usual.
> >
> > However, when I try to use sysopen in perl like
> >
> > sysopen(TUNNELDEV, "/dev/net/tun", O_RDWR);
> >
> > from the strace (truss) output I can see that instead it tries to do:
> >
> > open("/dev/net/tun", O_RDWR|O_LARGEFILE)
> >
> > which for some VERY strange reason succeeds but the file descriptor is
> > left in a bad state, so it is really unusable. For anything I try to do
> > afterwards, I get a
> >
> > EBADFD (File descriptor in bad state).
> >
> > As I have come down to the systel call level, there is no other reason
> > for this problem that I can think of except the O_LARGEFILE flag.
> > Indeed, a simple C program works quite fine without that flag.

>
> Just to make sure it is absolutely nailed down, does the simple C program
> stop working fine if you add the O_LARGEFILE in?


I 'll confirm that shortly, I haven't tried it yet. But judging from
the system calls I see in truss, it almost surely won't work.

>
>
> > I also have tried to use POSIX:pen but it still adds the flag.
> >
> > The documentation clearly states that from perl 5.6 and forth, the
> > O_LARGEFILE will be used whenever possible. But I really need to bypass
> > this and generate an open system call without it.

>
> Maybe you could compile perl without large file support?
>
> Or write a small C server that will accept socket connections and
> proxy /dev/net/tun over the socket.


Yes, these are valid options, as is the Inline::C idea which the
previous poster suggested. But the general idea is that there *should*
be a way to omit the O_LARGEFILE flag if needed.

Kind Regards,
Athanasios

>
> Xho
>
> --
> -------------------- http://NewsReader.Com/ --------------------
> Usenet Newsgroup Service $9.95/Month 30GB


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to pass multiline flag to re.sub without using re.complie. samba Python 2 05-23-2009 08:45 PM
Setting Dirty Flag without fsutil.exe from my code,... Kerem Gümrükcü Windows 64bit 12 04-06-2007 11:48 AM
vs2005 publish website doing bad things, bad things =?Utf-8?B?V2lsbGlhbSBTdWxsaXZhbg==?= ASP .Net 1 10-25-2006 06:18 PM
Anyone resolved links opening blank page? or box opening in Outlook 2000? S.Rodgers Firefox 13 12-16-2005 03:07 PM
Word file not opening from Adm -My recent docs but opening from file menu of Word Thaqalain Computer Support 0 06-30-2005 02:20 AM



Advertisments