一些C和Unix函数之间的关系是什么

时间:2015-03-10 10:17:45

标签: c linux unix

例如,在C中,我们有fopen,而在Unix中,我们有open。它们之间存在一些微妙的差异,但它们正在做同样的事情。

还有许多其他功能都存在于C和Unix中,它们之间的关系是什么?我应该选择哪一个?

2 个答案:

答案 0 :(得分:3)

fopen(3)在成功时返回FILE*,但open(2)成功返回文件描述符,因此他们没有做同样的事情(因为没有提供相同的类型)。 / p>

但是,在Linux上,fopen在内部使用open system call(以及其他一些......)。

<stdio.h>文件句柄正在处理缓冲。使用openread之类的系统调用,您可以更好地进行自己的缓冲。

另见this&amp; that并阅读Advanced Linux Programming&amp; syscalls(2)。请注意,在Linux上,从用户域应用程序的角度来看,系统调用本质上是一个原子初级操作(例如SYSCALLSYSENTER机器指令)。

使用strace(1)找出执行的系统调用(通过给定的进程或命令)。

在Linux上,libc正在实现系统调用之上的标准函数(如fprintf ....)。

许多系统调用没有任何libc对应物(除了它们的包装器),例如poll(2)

答案 1 :(得分:3)

open 是来自Unix系统的系统调用。 fopen 是打开文件的标准c函数。

使用fopen而不是开放有一些优点。

  • 它的多平台,作为它的C标准,您可以使用C编译器将程序移植到任何平台。

  • 它支持使用C标准函数(即:fprintf,fscanf)

  • 如果处理文本文件,这些函数可以处理不同的新行字符(Unix / Windows)