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

发布于 2024-12-01 18:48:58 字数 687 浏览 2 评论 0原文

首先,我说的是类UNIX系统。

我查看了Mac OS、Linux、Minix和K&RC书中对“FILE”结构体的定义,它们都是不同的。

在K&RC书中,

typedef struct _iobuf{
    int cnt;
    char *ptr;
    char *base;
    int  flag;
    int  fd;
} FILE;

在Mac OS上很清楚,它的结构内部有更多的东西。

在 Linux (3.0) 上,

typedef _IO_FILE FILE;

标题显示“在 C++ iostream 之上定义 ISO C stdio”。嗯……? (Linux 上的 C 是由 C++ 实现的?不是应该相反吗?) 看起来 _IO_FILE 定义在

Minix 上的 libio.h 中,定义与 K&R 非常相似。

我的理解是stdio.h应该是C的一部分。第一个C编译器是由汇编语言实现的。 C 应该独立于操作系统类型。

硬件上的机器代码 ->汇编-> C->更复杂的C-> UNIX

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

这怎么理解呢?

多谢, 阿尔弗雷德

First of all, I am talking about UNIX-like systems.

I look at the definition of the "FILE" struct at Mac OS, Linux, Minix and K&R C book, they are all different.

In K&R C book, it is quite clear

typedef struct _iobuf{
    int cnt;
    char *ptr;
    char *base;
    int  flag;
    int  fd;
} FILE;

on Mac OS, it has more stuff inside the struct.

on Linux (3.0), it is

typedef _IO_FILE FILE;

The header says "Define ISO C stdio on top of C++ iostreams." Em... ? ( C on Linux are implemented by C++ ? Shouldn't it be opposite?)
Looks like _IO_FILE definition is in libio.h

on Minix, the definition is quite similar as K&R.

My unstanding was stdio.h should be part of C. The first C compiler is implemented by assembly language. And C should be independent of OS type.

machine code on HW -> asm -> C -> more complicated C -> UNIX

And now, there are different stdio.h on different OSs (all kinds of UNIX) and the compilers are all gcc.

How to understand this?

Thanks a lot,
Alfred

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呆头 2024-12-08 18:48:58

FILE 结构与平台相关,其字段由 C 库内部使用。您不应该依赖其中的内容。

The FILE struct is platform dependent and its fields are used internally by the C library. You shouldn't be relying on what's inside it.

凉月流沐 2024-12-08 18:48:58

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

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

Your own C code should not depend on OS. C headers and internal CRT implementation are OS-dependent. The meaning of cross-platform programming: write the code, compile it in different OS, and it should work. However, underlying tools (C, cross-platform libraries) are interacting with OS-specific API and they are different in different OS.

Of course, you should not use any fields of opaque structures, this breaks platform independent code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文