1 /* 2 * Posix stdio -- fdopen 3 */ 4 #include "iolib.h" 5 /* 6 * Open the named file with the given mode, using the given FILE 7 * Legal modes are given below, `additional characters may follow these sequences': 8 * r rb open to read 9 * w wb open to write, truncating 10 * a ab open to write positioned at eof, creating if non-existant 11 * r+ r+b rb+ open to read and write, creating if non-existant 12 * w+ w+b wb+ open to read and write, truncating 13 * a+ a+b ab+ open to read and write, positioned at eof, creating if non-existant. 14 */ 15 FILE *fdopen(const int fd, const char *mode){ 16 FILE *f; 17 for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++) 18 if(f->state==CLOSED) 19 break; 20 if(f==&_IO_stream[FOPEN_MAX]) 21 return NULL; 22 f->fd=fd; 23 if(mode[0]=='a') 24 lseek(f->fd, 0L, 2); 25 if(f->fd==-1) return NULL; 26 f->flags=0; 27 f->state=OPEN; 28 f->buf=0; 29 f->rp=0; 30 f->wp=0; 31 f->lp=0; 32 return f; 33 } 34