c - 用于 unix/linux 开发的标准 I/O 库或低级

标签 c linux unix posix

我正在复习 unix 调用,所以这似乎是一个幼稚的问题(在假期中,只是无聊)。我知道 C 中有标准的 i/o,但它似乎总是在实践中用于类 UNIX 系统的低级调用(写入、读取、打开)(刚刚检查了几个开源项目)。 standard-io在实践中用的多吗?为什么低级 api 使用更多,是否存在中断或特定原因?还是我从一些精心挑选的案例中做出了关于低级别更受欢迎的错误假设?我知道标准 i/o 是一个 C 语言元素,但似乎他们实现了同样的事情,而且低级使用得更多。

最佳答案

stdio(3)库不涵盖 Linux 上可用的所有功能。特别是,socket(2) <stdio.h> 不提供其他低级功能(例如使用 poll(2) 等进行轮询)。功能。然而,<stdio.h>函数通常给出 buffering出于性能原因,这实际上非常重要。所以打电话write(2)对于每个字节,效率都非常低。使用 fflush(3)冲洗 <stdio.h>缓冲区。

阅读Advanced Linux Programming了解更多。

在实践中,混合 <stdio.h>函数和低级系统调用(如 read(2)write(2)mmap(2)poll(2)fcntl(2) ...)与 <stdio.h>函数通常(但不总是)不切实际。另见 fileno(3) .因此人们可能会选择在系统调用级别进行编码。

但是,当<stdio.h>功能足够了,使用起来很方便。

还有 <stdio.h>C11 中标准化标准,但是 write等等……只在POSIX ....

关于c - 用于 unix/linux 开发的标准 I/O 库或低级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20789997/

相关文章:

git - Git 的提交日期或作者日期时间戳的分辨率是多少?

c++ - 为什么与 C 相比,链接器在 C++ 中的任务更艰巨?

c - 尾递归究竟是如何工作的?

c - socket连接异常断开时,FILE流缓冲区会发生什么?

linux - 访问Google Compute Engine VM实例中的整个磁盘

c++ - Iperf 2.x 客户端如何检测它发送的流量?

c - 将所有在 gdb 中完成的调试存储在一个文件中

bash - 从分隔文件中捕获特定列

c - 基本 shell - chdir() 之后的 ls 命令

linux - 如何在 docker 中停止服务 jira 以更新 jira?