This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi glibc developers, I am looking into some internals of glibc's implementation of fread/fwrite, but surprisingly found that fread/fwrite don't invoke the "public available" read/write system call interface, while instead, invoke some "vtable"-related function handles. I got very confused with that and am very curious whether fread/fwrite will eventually "drill down" to some "xxx_internal_read"/"xxx_internal_write" functionns, like this: fwrite(...) -> _IO_sputn(...) -> ... -> xxx_internal_write(...) (the same goes for fread()) I think that is also the same for glibc's implementation of write(2): write(...) -> ... -> ... -> xxx_internal_write(...) (that says, both fwrite() and write() will drill down to the same xxx_internal_write()) Unfortunately the full implementation of fwrite() and write() are both auto-generated by some scripts when glibc is compiled[1]. I have traced fwrite() down but can find nothing valuable. The only thing that provides me some insights is this macro (in "libio/libioP.h"): # define _IO_JUMPS_FUNC(THIS) \ (IO_validate_vtable \ (*(struct _IO_jump_t **) ((void *) &_IO_JUMPS_FILE_plus (THIS) \ + (THIS)->_vtable_offset))) which I think tries to invoke some functions inside `struct FILE'. But in neither `struct FILE' nor 'struct _IO_FILE' can I such function pointers. Are those pointers also auto-generated? I will be very thankful if someone can enlighten me ;-) Yubin [1]: I know that is true for read/write, but not sure whether that is true for fread/fwrite
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |