Freebsd中fileno和fileno_unlocked的区别

从一个open返回的fd创建一个FILE*,所用的函数是fdopen。而反过来,就是用fileno。
由于FILE*所指向的是一个复杂的数据数据结构,一个进程内的所有线程共享这些数据,所以在使用fileno获取FILE*内容的时候,必须先使用flockfile或pthread_mutex_lock这样的函数加锁,这一点是由libc中的fileno函数本身完成的,调用fileno函数的用户并不用关心这些。而fileno_unlocked和fileno的实现上的区别就是,前者没有加锁/释放锁。
如果
1、你的程序是单线程
2、或者,尽管是多线程,但是可以保证同一时间内只有一个线程会对这个FILE*调用fileno函数
那么就可以采用fileno_unlocked代替fileno
类似的还有clearerr_unlocked、feof_unlocked、ferror_unlocked。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥