首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

stdio.h里找不到文件结构体部分,譬如_iob数组

2012-10-24 
求助stdio.h里找不到文件结构体部分,譬如_iob数组K&R的书 8.5节有习题要求用到_iob数组。下面会写代码。我用

求助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函数一个版本

 

C/C++ code
#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;}



ubuntu里的stdio.h代码。如下(有一个问题就是我看百度百科里的stdio.h代码比我电脑里的好理解阿,全是C语言格式的,而我电脑里的,貌似多了很多typedef,很难理解,着是怎么回事)
代码放在主页里了。地址如下

  http://my.csdn.net/my/code/detail/23279

[解决办法]
忘了K&R这个版本的C语言吧,C89早已成为事实上的C语言标准。
[解决办法]
FILE这个怎么定义的应该是标准不规定的东西。
[解决办法]
查MSDN是Windows程序员必须掌握的技能之一。

热点排行