From: ts Date: 2001-07-12T02:10:29+09:00 Subject: [ruby-talk:17672] Re: IO in a Ruby extension >>>>> "B" == Brett W Denner writes: B> I need to write a Ruby extension which reads binary data from a C FILE B> pointer (using B> fread) which corresponds to a Ruby File object. In other words, I want to B> use B> File.new inside Ruby, then pass the file descriptor into a C function which B> reads from B> the file I opened in Ruby. Look at ruby.h pigeon% less ruby.h [...] struct RFile { struct RBasic basic; struct OpenFile *fptr; }; [...] pigeon% Now in rubyio.h pigeon% less rubyio.h [...] typedef struct OpenFile { FILE *f; /* stdio ptr for read/write */ FILE *f2; /* additional ptr for rw pipes */ int mode; /* mode flags */ int pid; /* child's pid (for pipes) */ int lineno; /* number of lines read */ char *path; /* pathname for file */ void (*finalize)(); /* finalize proc */ } OpenFile; [...] pigeon% This mean that in your C program, you can write FILE *fd = RFILE(io)->fptr->f; where `io' is the object created by File::new Guy Decoux