我正在尝试创建一个简单的服务器,它可以连接到许多客户端,并向它们返回传递到服务器的文件中的引用(两行)。我在连接客户端和服务器或打开文件方面没有遇到任何问题,但在尝试一次获取两行时遇到了一些麻烦。每次客户端请求报价时,服务器都应从文件中读取接下来的两行并将其发送给客户端。当服务器到达文件末尾时,它应该重置回文件顶部。谁能帮我解决这个问题吗?
更新:这是我目前正在做的一次获取两行的操作,我只是不确定如何检查它是否位于文件末尾,如果是,则返回到文件顶部。有什么帮助吗?
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/