read、write、pread、pwrite都属于系统调用,p+函数多了一个offset参数,可以指定位置写入。
fread、fwrite属于glibc封装函数,因为系统调用开销比较大,fwrite会先写入缓冲区,一定条件下再去执行系统调用write,也可以使用fflush强制执行系统调用。
以上函数都不能单独的保证线程安全
read、write可以在open文件时加O_APPEND来保证线程安全。原理是加了个用户态锁。
pread、pwrite也可以使用O_APPEND,也可以不同线程不同offset来保证不冲突。
fread、fwrite需要线程锁之类的保证。
网友评论