Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-将变量与sizeof(int)进行比较_C_Pipe - Fatal编程技术网

C-将变量与sizeof(int)进行比较

C-将变量与sizeof(int)进行比较,c,pipe,C,Pipe,因此,最近我看到一段C代码如下: int result, input; result = read(fd, (char*)&input, sizeof(input)); if(result == sizeof(int)) return input; 比较result==sizeof(int)有什么作用?read返回读取的字节数(或-1出错)。代码试图从流中读取int,并确保read工作正常。read返回读取的字节数 在某些情况下(文件结束、磁盘错误、管道破裂),read返回的值可

因此,最近我看到一段C代码如下:

int result, input;


result = read(fd, (char*)&input, sizeof(input));

if(result == sizeof(int)) return input;

比较
result==sizeof(int)
有什么作用?

read
返回读取的字节数(或
-1
出错)。代码试图从流中读取
int
,并确保
read
工作正常。

read
返回读取的字节数

在某些情况下(文件结束、磁盘错误、管道破裂),
read
返回的值可能小于调用中请求的整数的大小,或者
-1
表示错误

这只是一个健全的检查,以确保
输入的完整性

就我个人而言,我更愿意针对
sizeof(input)
进行测试,因为如果
input
的类型更改为
short
double
,那么代码会错误地检测到读取大小问题。

这使问题更清楚

int readLength;
int readData; // or long, float, ...

readLength = read(fd, (char*)&readData, sizeof(readData));

if(readLength == sizeof(readData)) // Do something

由于重复使用了
result

,仅检查
result
是否已被完全读取,因此原始代码被破坏。这就是全部检查答案。当然,显示的代码是疯狂的,因为它用read覆盖了它刚刚读取的内容length@mreff555:如果C编译器知道什么是
std:iostream
,我会感到惊讶。它检查
result
sizeof(int)
是否具有相同的值。。。就像
1+1==2
检查
1+1
2
是否具有相同的值。这就是为什么read可能返回多个正值。。。谢谢,这很有帮助。