gpt4 book ai didi

c - 在 if 语句和缓冲区类型中读取

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:35 25 4
gpt4 key购买 nike

我只想知道下面的代码是如何工作的。我正在尝试打开一个文件并使用 read() 函数读取它。但是,我也想检查读取是否成功。

下面的代码是否执行了两次 read()?我的意思是,代码执行后缓冲区中是否有 1024 字节的数据?或者它只有 512 字节的数据,因为只有第一个执行和 if 语句中的读取只检查值但不会真正写入缓冲区。另外,我正在将原始位读入缓冲区。我使用的缓冲区类型正确吗?如果我不清楚,我很抱歉。提前致谢!

//Read the file
void *buffer;
read(fd,buffer,512);
if (read(fd,buffer,512) < 0){
printf("Error: Read was unsuccessful \n");
}
else{
printf("Read is successful \n" );
}

最佳答案

是的,read(fd,buffer,512) 被调用了两次。如果您希望多次使用返回值,请将其存储在一个变量中——再次调用相同的函数,即使使用相同的参数,也与之前的调用不同。通常,C 中的函数可能有副作用,因此无法优化使用相同参数多次调用同一函数(例如,read 的副作用)正在将描述符中的数据读入缓冲区,实际上调用 read 的目的更多是为了读取而不是为了返回值。

同时,如果您的代码如图所示是完整的,则 buffer 的使用是无效的,因为它未初始化。

假设 buffer 确实指向一个能够保存数据的实际缓冲区,则 read 最多可将 512 字节存储在那里。由于您没有更改 buffer 指向 read 调用之间的位置,因此第二次 read 将覆盖同一缓冲区。 (请注意,不能保证请求的所有 512 个字节,或者任何字节,都将被实际读取 - read 的返回值会告诉您实际读取了多少字节。)

关于c - 在 if 语句和缓冲区类型中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20070953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com