求助stdio.h里找不到文件结构体部分,譬如_iob数组
K&R的书 8.5节有习题要求用到_iob数组。下面会写代码。我用的系统是ubuntu12.04, code blocks 10.05。从CB里看stdio.h说是C99的。但是着不到文件结构体的部分,所以一些要用到的譬如_iob名字会提示未声明。
还有一个问题,就是我看百度百科里的stdio.h代码比我电脑里的好理解阿,全是C语言格式的,而我电脑里的,貌似多了很多typedef,很难理解,着是怎么回事。
求高手指点小菜,最好详细点,初学者。
类似这样的结构体
结构体部分
typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;
书中用到结构体的例题
fopen函数一个版本
#include <stdio.h>#include <fcntl.h>#include <unistd.h>#define PERMS 0666int main(){ printf("Hello world!\n"); return 0;}FILE *fopens(char *name, char *mode){ int fd; FILE *fp; if (*mode != 'r' && *mode != 'w' && *mode != 'a') return NULL; for (fp = _iob; fp < _iob + FOPEN_MAX; fp++) if ((fp->flag & (_READ | _WRITE)) == 0) break; if (fp >= _iob + OPEN_MAX) return NULL; if (*mode == 'w') fd = creat(name, PERMS); else if (*mode == 'a'){ if ((fd = open(name, O_WRONLY, 0)) == -1) fd = creat(name, PERMS); lseek(fd, 0L, 2); }else fd = open(name, O_RDONLY, 0); if (fd == -1) return NULL; fp->fd = fd; fp->cnt = 0; fp->base = NULL; fp->flag = (*mode == 'r') ? _READ : _WRITE; return fp;}