【问题标题】:Detect EOF on a fgets While Loop在 fgets While 循环上检测 EOF
【发布时间】:2012-11-06 17:52:10
【问题描述】:

我正在使用fdopenfgets 循环遍历 TCP 套接字输入的每一行,如下所示:

int connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
FILE *f;
char line[1024];

f = fdopen(connfd, "a+");
while(fgets(line, sizeof(line), f) != NULL) {
    printf("%s", line);
}

printf("EOF");
fclose(f);

问题在于,由于某种奇怪的原因,fgets 似乎永远不会返回 NULL。有没有其他方法可以检查EOF

【问题讨论】:

  • 如果fgets 没有返回NULL,那么你的缓冲区中就没有EOF

标签: c sockets inputstream eof fgets


【解决方案1】:

如果套接字关闭,您只会在套接字上接收并结束文件。

如果您需要在保持套接字打开的同时停止读取,您需要为此定义一个协议。

【讨论】:

  • 只有在连接被对等方关闭时,你才能获得EOS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多