ssize_t num_bytes = read(datapacket.clientSockfd,&ReceivePackets,sizeof(ReceivePackets)); CON_LOG("==="); if (num_bytes > 0) { // 成功读取了一定数量的数据 CON_LOG("###read######Read %zd bytes,fd:%d,chooice:%s cmdBuf:%s# returnValue:%s",num_bytes,ReceivePackets.clientSockfd,ReceivePackets.choose,ReceivePackets.cmdBuf,ReceivePackets.returnValue); } else if (num_bytes == 0) { // 对端关闭了连接 CON_LOG("Connection closed\n"); } else if (errno == EAGAIN || errno == EWOULDBLOCK) { // 当前没有数据可读 CON_LOG("No data available\n"); } else { // 出现了错误 perror("read"); return -1; }这样写对了么
时间: 2024-02-14 10:26:39 浏览: 172
你的代码在处理 `read()` 函数返回值的情况方面是正确的。下面是对你的代码进行解释:
```c
ssize_t num_bytes = read(datapacket.clientSockfd, &ReceivePackets, sizeof(ReceivePackets));
CON_LOG("===");
if (num_bytes > 0) {
// 成功读取了一定数量的数据
CON_LOG("###read######Read %zd bytes,fd:%d,chooice:%s cmdBuf:%s# returnValue:%s",
num_bytes, ReceivePackets.clientSockfd, ReceivePackets.choose, ReceivePackets.cmdBuf, ReceivePackets.returnValue);
} else if (num_bytes == 0) {
// 对端关闭了连接
CON_LOG("Connection closed\n");
} else if (errno == EAGAIN || errno == EWOULDBLOCK) {
// 当前没有数据可读
CON_LOG("No data available\n");
} else {
// 出现了错误
perror("read");
return -1;
}
```
你正确地使用了 `num_bytes` 来判断 `read()` 函数的返回情况。当 `num_bytes` 大于 0 时,表示成功读取了一定数量的数据,你可以在这个分支中对读取到的数据进行进一步处理。当 `num_bytes` 等于 0 时,表示对端关闭了连接,你可以相应地进行处理。当 `errno` 为 `EAGAIN` 或 `EWOULDBLOCK` 时,表示当前没有数据可读,你可以继续等待或进行其他操作。当 `read()` 返回值小于 0 并且 `errno` 不是 `EAGAIN` 或 `EWOULDBLOCK` 时,表示出现了错误,你使用 `perror()` 输出错误信息并返回 -1。
总体而言,你的处理方式是正确的,可以根据不同的返回情况进行相应的操作。如果你的代码在实际运行中没有问题,那么这样的写法是正确的。
如果你还有其他问题,请随时向我提问。
阅读全文