c - 一次从文件中读取两行

标签 c client-server fopen fgets

我正在尝试创建一个简单的服务器,它可以连接到许多客户端,并向它们返回传递到服务器的文件中的引用(两行)。我在连接客户端和服务器或打开文件方面没有遇到任何问题,但在尝试一次获取两行时遇到了一些麻烦。每次客户端请求报价时,服务器都应从文件中读取接下来的两行并将其发送给客户端。当服务器到达文件末尾时,它应该重置回文件顶部。谁能帮我解决这个问题吗?

更新:这是我目前正在做的一次获取两行的操作,我只是不确定如何检查它是否位于文件末尾,如果是,则返回到文件顶部。有什么帮助吗?

line 是我要发送的字符数组,einstein 是我正在读取的打开文件。

i=0;
while (i<2)
{
    char temp[256] ;
    fgets(temp, sizeof(temp), einstein) ;
    strcat(line, temp) ;
    i++;
}

send(sock, line, strlen(line), 0 ); /* write the line */

strcpy(line, "") ;

谢谢!

最佳答案

您可以使用简单的辅助函数:

char *read_next_line(char *buffer, size_t size, FILE *file)
{

   if (fgets(buffer, size, file))
   {
       return buffer;
   }
   // error or EOF
   if (!feof(file)) return NULL; // error
   fseek(file, 0, SEEK_SET);
   return fgets(buffer, size, file);
}

该函数尝试读取该行,如果失败,它会尝试重新定位流并再次读取。

所以代码看起来像:

FILE *list = fopen("config.txt", "r"); 
char line[1024];

if (read_next_line(line, sizeof(line), list)
{
    send(sock, line, strlen(line), 0);
    if (read_next_line(line, sizeof(line), list)
    {
       send(sock, line, strlen(line), 0);
    }
}

替代方案可能如下所示:

FILE *list = fopen("config.txt", "r"); 
char line[2048]; // buffer for 2 lines

if (read_next_line(line, sizeof(line), list)
{
    size_t len = strlen(line)
    if (read_next_line(line + len, sizeof(line) - len, list)
    {
       send(sock, line, strlen(line), 0);
    }
}

关于c - 一次从文件中读取两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379594/

相关文章:

c - 为什么在 jmps 就足够时调用?

java - 带多线程服务器 (TCP/IP) 的客户端/服务器聊天室

client-server - 为什么服务器无法获取客户端MAC地址,如客户端IP?

php - 使用 PHP 查找 CSV 文件中是否存在某个值

c - 在函数中查找数组的长度

python - 用python制作查找表,写入可以在C程序中读取的二进制文件

c - 打开没有 Windows 行结尾的非文本文件

c - fopen C 上的段错误

c - 反转字符串功能无法正常工作

javascript - 如何将IIFE包裹的JS文件导入TS