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

时间:2011-08-28 05:35:42

标签: 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;

在Mac OS上,它在结构中有更多内容。

在Linux(3.0)上,它是

typedef _IO_FILE FILE;

标题显示“在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。

如何理解这一点?

非常感谢, 阿尔弗雷德

2 个答案:

答案 0 :(得分:5)

FILE结构取决于平台,其字段由C库在内部使用。你不应该依赖它里面的东西。

答案 1 :(得分:1)

您自己的C代码不应该依赖于操作系统。 C头和内部CRT实现依赖于操作系统。跨平台编程的意义:编写代码,在不同的操作系统中编译,它应该工作。但是,底层工具(C,跨平台库)正在与特定于操作系统的API进行交互,并且它们在不同的操作系统中是不同的。

当然,您不应该使用任何不透明结构的字段,这会打破与平台无关的代码。