Welcome to the Monastery | |
PerlMonks |
comment on |
( [id://3333]=superdoc: print w/replies, xml ) | Need Help?? |
I'm not going to discuss what is more efficient, syscall or readdir. It is up to you to check and decide. I'll just try to give you some hints for the use of pack/unpack and/or Convert::Binary::C Your first mistake, is the difference between actual size of buffer, and the declared size of buffer. You do my $buf = "\0" x 128; which reserves 128 bytes of buffer, but to the syscall you say that your buffer is BUF_SIZE long, which is 4096. You'll end up with corrupted memory, or even SEGFAULT. Then, you have to check for syscall returning 0. In this case, there's nothing to unpack. Finally. Returned buffer shall contain one or more records of variable length. You have to configure Convert::Binary::C so that it is prepared to handle such records. Read "The Dimension Tag" section in the module documentation. So your algorithm shall be "while $read != 0 convert first structure; $read -= length of converted; remove processed part from buffer". You don't have to use Convert::Binary::C. Using perls native "unpack" you can process this structure like this
In reply to Re: using Linux getdents syscall
by andal
|
|