【发布时间】: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 总是按值传递。所以让参数保持不变没有多大意义(但让缓冲区本身保持不变有很多价值)。