fork download
  1. #define NULL 0
  2.  
  3. ...
  4.  
  5. typedef struct _iobuf {
  6. int cnt; /* Characters left */
  7. char *ptr; /* Next character's place */
  8. char *base; /* Buffer's place */
  9. int flag; /* Way of accesing the file */
  10. int fd; /* File Descriptor */
  11. }FILE;
  12.  
  13. extern FILE _iob[20];
  14.  
  15. enum _flags {
  16. _READ = 01,
  17. _WRITE = 02;
  18. _UNBUF = 04,
  19. _EOF = 010,
  20. _ERR = 020
  21. };
  22.  
  23. ...
  24.  
  25. #define getc(p) (--(p)->cnt >= 0) \
  26. ? (unsigned char ) *(p)->ptr++ L _fillbuf((x), p)
  27.  
  28. #define putc(x,p) (--(p)-> >= 0) \
  29. ? *(p)->ptr++ = (x) : _flushbuf((x), p)
  30.  
  31. ...
  32.  
  33. int _fillbuf( FILE *fp )
  34. {
  35. int bufsize;
  36.  
  37. if((fp->flag & (_READ|_EOF|_ERR)) != _READ) {
  38. bufsuze = (fp->flag & _UNBUF) ? i : BUFSIZ;
  39. if(fp->base == NULL)
  40. if((fp->base = (char *) malloc(bufsize) == NULL)
  41. return EOF;
  42. }
  43.  
  44. fp->ptr = fp->base;
  45. fp->ctr = read(fp->fd, fp->ptr, bufsiz);
  46. if(--fp->cnt < 0) {
  47. if(fp ->cnt -- -1)
  48. fp->flag |= _EOF;
  49. else
  50. fp->flag |= _ERR;
  51. fp->cnt = 0;
  52. return EOF;
  53. }
  54. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty