我有一个从服务器读取文件并返回数据的函数:
int readMessageFromServer(int fileDescriptor) {
char buffer[MAXMSG];
int nOfBytes;
nOfBytes = read(fileDescriptor, buffer, MAXMSG);
if(nOfBytes < 0) {
perror("Could not read data from server\n");
exit(EXIT_FAILURE);
}
else
if(nOfBytes == 0)
return(-1);
else
printf("Server Message: %s\n", buffer);
return(0);
}
问题在于
行printf("Server Message: %s\n", buffer);
如果我将此行更改为
printf("Server Message: %s\n>", buffer);
它拒绝打印'&gt;'签名,直到获得更多数据。
这是一个已知的限制还是我做错了什么?
我应该补充说,对此函数的调用如下所示:
while(readMessageFromServer(sock) > 0) {continue;};
答案 0 :(得分:2)
除了您可能想在引号内写>
之外,您还需要通过调用fflush(stdout)
来刷新输出缓冲区。缓冲区通常只在换行后刷新。
答案 1 :(得分:1)
nOfBytes = read(fileDescriptor,buffer,MAXMSG);
无法保证您读取了多少字节或它们是否构成空终止字符串。至少你应该改成这样的东西:
int readMessageFromServer(int fileDescriptor) {
char buffer[MAXMSG];
int nOfBytes;
nOfBytes = read(fileDescriptor, buffer, MAXMSG - 1);
if(nOfBytes < 0) {
perror("Could not read data from server\n");
exit(EXIT_FAILURE);
}
else
if(nOfBytes == 0)
return(-1);
else
{
buffer[nOfBytes] = '\0';
printf("Server Message: %s\n", buffer);
return(0);
}
答案 2 :(得分:0)
printf
使用stdout作为缓冲输出
使用printf
更改fprintf(stderr, ...)
可以解决您的问题。