如何理解stdio.h在不同的操作系统上有所不同

Alf*_*ong 1 c linux operating-system stdio minix

首先,我在谈论类UNIX系统.

我看一下Mac OS,Linux,Minix和K&R C书中"FILE"结构的定义,它们都是不同的.

在K&R C书中,很清楚

typedef struct _iobuf{
    int cnt;
    char *ptr;
    char *base;
    int  flag;
    int  fd;
} FILE;
Run Code Online (Sandbox Code Playgroud)

在Mac OS上,它在结构中有更多东西.

在Linux(3.0)上,它是

typedef _IO_FILE FILE;
Run Code Online (Sandbox Code Playgroud)

标题显示"在C++ iostreams之上定义ISO C stdio".嗯...?(Linux上的C是用C++实现的吗?不应该相反吗?)看起来_IO_FILE定义在libio.h中

在Minix上,定义与K&R非常相似.

我的unstanding是stdio.h应该是C的一部分.第一个C编译器是用汇编语言实现的.并且C应该独立于OS类型.

HW上的机器代码 - > asm - > C - >更复杂的C - > UNIX

现在,在不同的操作系统(各种UNIX)上有不同的stdio.h,编译器都是gcc.

怎么理解这个?

非常感谢,阿尔弗雷德

ano*_*ard 5

FILE结构是依赖于平台和它的字段由C库内部使用.你不应该依赖它里面的东西.