Операционная система UNIX. Руководство программиста




Как системные вызовы и библиотечные функции используются в C-программах - часть 3


Ниже приводится содержимое файла <stdio.h>:

#ifndef _NFILE #define _NFILE 20

#define BUFSIZ 1024

/* Размер буфера при выводе в небуферизованный файл */ #define _SBFSIZ 8

typedef struct { int _cnt; unsigned char *_ptr; unsigned char *_base; char _flag; char _file; } FILE;

/* Флаг _IOLBF означает, что файловый вывод будет буфе- ризоваться построчно. _IONBF, _IOLBF и _IOFBF могут использоваться не только как флаги, но и как значения "типа" для передачи функции setvbuf */ #define _IOFBF 0000 #define _IOREAD 0001 #define _IOWRT 0002 #define _IONBF 0004 #define _IOMYBUF 0010 #define _IOEOF 0020 #define _IOERR 0040 #define _IOLBF 0100 #define _IORW 0200

#ifndef NULL #define NULL 0 #endif #ifndef EOF #define EOF(-1) #endif

#define stdin (&_iob[0]) #define stdout (&_iob[1]) #define stderr (&_iob[2])

#define _bufend(p) _bufendtab[(p)->_file] #define _bufsiz(p) (_bufend(p) - (p)->_base)

#ifndef lint #define getc(p) (--(p)->_cnt < 0 ? _filbuf(p) : \ (int) *(p)->_ptr++) #define putc(x, p) (--(p)->_cnt < 0 ? \ _flsbuf((unsigned char) (x), (p)) : \ (int) (*(p)->_ptr++ = \ (unsigned char) (x))) #define getchar() getc(stdin) #define putchar(x) putc((x), stdout) #define clearerr(p) ((void) ((p)->_flag &= \ ~(_IOERR | _IOEOF))) #define feof(p) ((p)->_flag & _IOEOF) #define ferror(p) ((p)->_flag & _IOERR) #define fileno(p) (p)->_file #endif

extern FILE _iob[_NFILE]; extern FILE *fopen(), *fdopen(), *freopen(), *popen(), *tmpfile(); extern long ftell(); extern void rewind(), setbuf(); extern char *ctermid(), *cuserid(), *fgets(), *gets(), *tempnam(), *tmpnam(); extern int fclose(), fflush(), fread(), fwrite(), fseek(), fgetc(), getw(), pclose(), printf(), fprintf(), sprintf(), vprintf(), vfprintf(), vsprintf(), fputc(), putw(), puts(), fputs(), scanf(), fscanf(), sscanf(), setvbuf(), system(), ungetc(); extern unsigned char *_bufendtab[];

#define L_ctermid 9 #define L_cuserid 9 #define P_tmpdir "/usr/tmp/" #define L_tmpnam (sizeof (P_tmpdir) + 15) #endif




Содержание  Назад  Вперед