lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Tue, Jun 13, 2017 at 11:35 PM, Sean Conner <sean@conman.org> wrote:
>   Several years ago, I starting writing a program to index all the files on
> my computer (a Linux system).  Part of this indexing involved classifying
> the type of file and for that, Linux came with a program called 'file' that
> does that.  It supported the option "-f" to read filenames from stdin and it
> would write the file type (I used the "-i" option to print out mime types).
>
>   So my thought was:  I can invoke "file", feeding it filenames in stdin,
> and reading the file types on stdout.  Only issue was: popen() (and by
> extension, io.popen() but this was before I got into Lua) only supports
> reading or writing (but not both).  I was trying to avoid having to generate
> a list prior (1,499,996 entries---probably more now) to generating the
> types.
>
>   "Not a problem," thought I.  "I wrote a Unix shell as a college project,
> I know how to execute a program with redirection."  And so I did a
> bi-directional "popen()" function---
>
> ---which failed miserably.

Why do you need bi-directional popen for this task?

for entry in io.popen 'find / | file -f -' : lines () do
  print ( entry ) end

A similar approach should work in C.

-Parke