【问题标题】:Why does 'write()' take a const buffer while 'read()' doesn't?为什么 'write()' 使用 const 缓冲区,而 'read()' 没有?
【发布时间】:2021-05-02 23:23:56
【问题描述】:

读/写的签名如下:

 ssize_t write(int fd, const void *buf, size_t count);

 ssize_t read(int fd, void *buf, size_t count);

为什么read() 也没有const void *?这是否意味着它改变了buf 的值?

【问题讨论】:

  • 重要的是它改变了buf 指向的值。这是有道理的:它将用从文件中读取的数据替换缓冲区的内容。另一方面,write 根本不需要更改缓冲区内容。
  • read 将输出写入buf指向的空间
  • 谢谢!我弄错了const的意思
  • @Max Darling Re "我误解了const 的含义",void * const buf 意味着buf 本身无法更改。当然,const void * const buf 不能更改 buf 或它指向的那个。 /// 请记住,在函数中更改buf 本身对调用者没有影响,因为C 总是按值传递。所以让参数保持不变没有多大意义(但让缓冲区本身保持不变有很多价值)。

标签: c unix


【解决方案1】:

因为write()不会改变缓冲区的内容,而只会将其写入文件。

另一方面,read() 将更改其缓冲区(根据文件中的内容),因此最好不要是 const

一般规则,变化的不是const

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多