Linux系统函数read()/write()/pread()/pwrite()有什么区别?
一、Linux系统函数read()/write()/pread()/pwrite()的区别
read()
和 write()
:这两个函数分别用于从文件中读取数据和向文件写入数据。它们基于文件的当前位置进行操作,并在操作完成后更新文件位置。这些函数适用于顺序读写文件的场景。
pread()
和 pwrite()
:这两个函数也分别用于从文件中读取数据和向文件写入数据。然而,它们允许在指定的文件偏移量处进行操作,而不影响文件的当前位置。这意味着在多线程环境中,可以使用 pread()
和 pwrite()
函数在不同的文件偏移量处同时读写文件,而不需要额外的同步机制(如互斥锁)来?;の募恢?。这些函数适用于随机访问文件或多线程文件操作的场景。
1、read() 函数
read()
函数用于从文件、设备或其他数据流中读取数据。它的原型为:
ssize_t read(int fd, void *buf, size_t count);
其中,fd
是一个打开的文件描述符,buf
是一个指向数据缓冲区的指针,count
是要读取的字节数。read()
函数从文件的当前位置开始读取数据,并将读取到的数据存储在缓冲区 buf
中。函数返回实际读取到的字节数,如果到达文件末尾或发生错误,则返回 -1。
2、write() 函数
write()
函数用于将数据写入文件、设备或其他数据流。它的原型为:
ssize_t write(int fd, const void *buf, size_t count);
其中,fd
是一个打开的文件描述符,buf
是一个指向数据缓冲区的指针,count
是要写入的字节数。write()
函数从缓冲区 buf
中读取数据,并将其写入文件的当前位置。函数返回实际写入的字节数,如果发生错误,则返回 -1。
3、pread() 函数
pread()
函数与 read()
函数类似,但允许在指定的文件偏移量处读取数据,而不影响文件的当前位置。它的原型为:
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
其中,offset
参数用于指定文件偏移量。pread()
函数从文件的 offset
位置开始读取数据,并将读取到的数据存储在缓冲区 buf
中。函数返回实际读取到的字节数,如果到达文件末尾或发生错误,则返回 -1。
4、pwrite()
函数
pwrite()
函数与 write()
函数类似,但允许在指定的文件偏移量处写入数据,而不影响文件的当前位置。它的原型为:
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
其中,offset
参数用于指定文件偏移量。pwrite()
函数从缓冲区 buf
中读取数据,并将其写入文件的 offset
位置。函数返回实际写入的字节数,如果发生错误,则返回 -1。

猜你喜欢LIKE
相关推荐HOT
更多>>
mysql怎么查看连接池是否已满?
一、mysql怎么查看连接池是否已满1.查看连接数配置(MySQL服务器允许的最大连接数16384)show variables like ‘%max_connections%’2.查看当前...详情>>
2023-10-17 21:20:19
什么是职场情商,如何提高?
什么是情商?情商是一个 20 世纪 90 年代作为学术话题出现的概念,并迅速成为商业心理学和职场动态研究的重要组成部分。它通常被称为 EQ(情商...详情>>
2023-10-17 20:16:30
vector, list, map等容器使用场合是什么?
一、vector, list, map等容器使用场合vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访...详情>>
2023-10-17 19:45:03
数据挖掘中涉及的关联规则在实际生活中的应用有哪些?
一、数据挖掘中涉及的关联规则在实际生活中的应用关于关联规则分析,这篇文章可以认真学习一下,讲的比较全面,关联规则分析还在零售、快消、电...详情>>
2023-10-17 18:40:06热门推荐
数据库聚集索引非聚集索引实现上有哪些区别?
沸数据库(如oracle、mysql)及编程语言(php、python、perl、lisp)的区别?
热CSS 隐藏页面元素有哪些方法?
热除了cx_Oracle,python还可以通过什么方式访问Oracle数据库?
新SQL开启事务处理的语句 START TRANSACTION 和BEGIN TRAN的区别?
Android适配你需要学习哪些?
开发web应用,好的开发流程是怎么样的?
为什么说Gradle是Android进阶绕不去的坎?
mysql怎么查看连接池是否已满?
WHERE中有很多IN判断怎么提速?
软件开发要遵循哪些事项?
有了innodb buffer pool为什么要有redis?
什么是职场情商,如何提高?
为什么没有以hbase作为存储引擎的关系型数据库实现?
技术干货






