Linux中write和writev的区别,write() vs writev()

Linux中write和writev的区别,write() vs writev(),第1张

Linux中write和writev的区别,write() vs writev() Linux中write和writev()的区别:

我觉得StackOverflow上面的回答写的很好,see: write vs writev

下面是我自己的精简版总结,觉得上面的回答太长可以看一下:

函数原型:

  1. write
    #include 
    
    ssize_t write(int fd, const void *buf, size_t count);
    
    表示从buf开始的缓冲区文件描述符fd所引用的文件写入count字节数。
  2. writev
    #include 
    
    ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
    
    表示像文件描述符fd所关联的文件写入iovcnt个缓冲区的数据,缓冲区是由iov来标识的,iov表示结构体数组的指针。(也就是有可能将多个缓冲区的数据写入一个文件当中,被称为gather output,汇聚写,同样类似的有readv,分散读)

区别
这里最好看一下上面的链接,写的很详细,如果觉得太长,下面是精简的总结。

  1. writev允许处理非连续的数据块。也就是说,缓冲区可以逐个单独分配,不用是一块连续的较大的地址空间。
  2. writev 的I/O是“原子的”。例如,如果你执行一个writev *** 作,所有数据将在一个连续 *** 作中被写入,不会被中断。
  3. 如果使用write,则必须在以下两种情况下进行选择:使用memcpy(带来额外开销)将它们复制到一个内存块中,然后再执行一个write调用。
  4. 进行三个独立的write调用(带来额外开销)。另外,来自其他进程的write调用可以分散在这些write之间(也就是整体上看不是原子 *** 作)。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5671100.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存