千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  云计算技术干货  >  正文

Linux系统函数read()/write()/pread()/pwrite()有什么区别?

来源:千锋教育
发布时间:2023-10-11 20:56:35
分享

一、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。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • Python 在 Linux 里面有哪些应用? 一、Python 在 Linux 里面有哪些应用Python 在 Linux 里面的应用主要是运维。python在系统管理上的优势在与强大的开发能力和完整的工具链。python的工程开发能力强大,远强
  • 为什么STL和linux都使用红黑树作为平衡树的实? 一、为什么STL和linux都使用红黑树作为平衡树的实现选择红黑树作为底层实现红黑树是一种类平衡树, 但它不是高度的平衡树, 但平衡的效果已经很好了。STL map , nginx,linux 虚拟内
  • Linux内核链表有什么好处? 一、Linux内核链表的好处1、高效的插入和删除操作Linux 内核链表的设计经过了精心优化,使得插入和删除操作非常高效。通过使用指针的指针来引用链表节点,可以避免不必要的指针复制和内存拷贝,从而提高
  • Linux系统函数read()/write()/pread()/pwrite()有什么区别? 一、Linux系统函数read()/write()/pread()/pwrite()的区别read() 和 write():这两个函数分别用于从文件中读取数据和向文件写入数据。它们基于文件的当前位置进
  • Linux系统有什么好处? 一、Linux系统的好处1、免费和开源Linux系统是免费和开源的,任何人都可以下载、使用、修改和分享源代码。这使得Linux系统成为开发人员、研究人员、学生和个人用户的优选操作系统。2、高度安全性L
  • 什么是linux进程? 一、什么是linux进程Linux进程是指在Linux操作系统上运行的程序实例。进程是操作系统中最基本的资源之一,每个进程都具有自己的代码、数据、内存空间和状态等属性。Linux进程的创建和管理是由操