gpt4 book ai didi

c - Read() 尝试读取文件时卡住

转载 作者:行者123 更新时间:2023-11-30 14:44:34 25 4
gpt4 key购买 nike

我有一个接收服务器状态的检查点文件。该状态表示通过我的网络传递的序列化命令。

我正在尝试读取该文件,但它卡在了读取 while 循环中。

我的阅读功能:

struct message_t *pmanager_readop(int fd){
if (fd < 0) return NULL;

// Variables
char *buffer = NULL;
int result, msg_size;
struct message_t *msg;

// Check if file has data
lseek (fd, 0, SEEK_END);
int size_ckp = lseek(fd, 0, SEEK_CUR);

if (size_ckp <= 0)
return NULL;

// Read message size
result = read_all(fd, (char *) &msg_size, 4);
if (result < 0) {
return NULL;
}
msg_size = ntohl(msg_size);
// ............

我的 read_all() 函数:

int read_all(int sock, char *buf, int len){
int bufsize = len;
while(len > 0){
int res = read(sock,buf,len);

if(res < 0){
if (errno == EINTR) continue;
return res;
}
buf += res;
len -= res;
}
return bufsize;
}

我使用相同的函数从服务器/客户端连接读取数据,具有相同的序列化和格式,但使用套接字描述符,并且它工作得很好。

最佳答案

您应该处理 read() 的情况返回0 ,告诉您如果从套接字描述符读取,另一端将关闭连接,或 EOF从文件描述符读取时遇到。

关于c - Read() 尝试读取文件时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53469390/

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