1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
/* 8-02_syscalls.h
*
* A simpler stdio.h to aid in exercises 8-2
*/
long lseek(int fd, long offset, int origin);
struct _flags {
unsigned int _READ : 1;
unsigned int _WRITE : 1;
unsigned int _UNBUF : 1;
unsigned int _EOF : 1;
unsigned int _ERR : 1;
} flags;
typedef struct _iobuf {
int cnt;
char *ptr;
char *base;
struct _flags flags;
int fd;
} my_FILE;
my_FILE _iob[FOPEN_MAX] = {
/* stdin is read-only */
{ 0, (char *) 0, (char *) 0, {1, 0, 0, 0, 0}, 0 },
/* stdout is write only */
{ 0, (char *) 0, (char *) 0, {0, 1, 0, 0, 0}, 1 },
/* stderr is written AND not buffered */
{ 0, (char *) 0, (char *) 0, {0, 1, 1, 0, 0}, 2 }
};
#define feof(p) (((p)->flags._EOF) != 0)
#define ferror(p) (((p)->flags._ERR) != 0)
#define fileno(p) ((p)->fd)
#define my_getc(p) (--(p)->cnt >= 0 ? (unsigned char) *(p)->ptr++ : my__fillbuf(p))
#define getchar() getc(stdin)
int my_fempty(struct _flags flags) {
if (!flags._READ && !flags._WRITE && !flags._UNBUF && !flags._EOF && !flags._ERR) {
return 1;
} else {
return 0;
}
}
int my_fclose(my_FILE*);
|