首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果stdio是跨平台的C/标准库抽象的C

如果stdio是跨平台的C/标准库抽象的C
EN

Stack Overflow用户
提问于 2018-08-07 10:58:47
回答 1查看 652关注 0票数 0

我正在考虑为跨平台编译C,并且已经弄清楚了。现在,我想知道您是否需要特定于windows/mac/linux的库,还是stdio (glibc)是一个跨平台库,将所有低级别的系统抽象成一个很好的标准API。不知道它是不是这么做的。例如,文件系统的东西,似乎是跨平台的。但也许网络连接的东西不是,不确定。而且,我看到了很多这里#ifdef _WIN32,尽管它只是stdio上的一个简单的文件系统包装器,所以不确定stdio是否没有涵盖所有内容。

环顾四周,我看到一些“跨平台”库(如利布夫 )有特定于windows和unix的代码,因此不确定是否需要连接到“本机”(os特定的)功能,以及通常需要这样做的时间/地方。

首先,想知道glibc / stdio是否是围绕syscall和其他常见函数的跨平台抽象。然后想知道当您需要编写特定于平台的功能时,是否可以简单地解释/概述,以及在此基础上是否没有标准的库/抽象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-07 11:03:33

stdio.hC11标准的一部分(参见n1570;您确实应该下载并阅读该标准)。如果限制自己只使用该标准描述的函数(按照标准指定的方式),如果使用符合标准的实现(例如编译器和C标准库实现),则应该是安全的。

但是,许多特性(例如目录、符号链接、文件截断)都超出了C11标准。您可能对POSIX标准感兴趣。

插座不是C11标准的一部分(但主要是POSIX,参见)。

一些库(例如滑翔)试图为几个OSes定义公共抽象。如果您想要轻松地编写在几个常见平台上可编译的源代码,您可能会考虑这些。(使用C++,您还可以使用波科助推Qt、.)

顺便说一下,Linux手册页(从介绍(2) &介绍(3)开始.)经常提到大多数功能所遵循的标准。例如,查城(2)是在POSIX1.2008中定义的。

还请注意,标准是规范,可能没有完全遵循或遵守(甚至在标准中也是bug)。例如,C11 线程 (例如thrd_create)可能无法在某些(仍在使用的) 滑翔版本中使用(因为它的线程(7)早于C11)。另外,一些库实现的标准函数超出了标准要求(例如,在Linux上,fopen(3)在模式字符串中理解m )。

记住这句格言:没有可移植的代码,只有已经移植(到某些特定系统)的代码。另见

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51725131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档