0

我在客户端实现多个客户端连接的客户端服务器聊天程序时遇到问题。问题是我遇到的是我如何让客户知道可以输入一些东西?目前,我的 printf 语句没有输出到屏幕上。有没有一种方法可以通知客户可以在不使用新行的情况下输入?

这是相关代码

客户端

while(1) {
  printf(">"); //this isn't being outputted

  fd_set rfds;
  FD_ZERO(&rfds);

  FD_SET(serverSocket, &rfds);
  FD_SET(0, &rfds);

  if(select(serverSocket+1, &rfds, NULL, NULL, NULL) < 0) {
      perror("select");
      exit(-1);
  }

  if (FD_ISSET(serverSocket, &rfds)) {
     //recv data from server
  }
  else if (FD_ISSET(0, &rfds)) {
     //read keyboard
  }
}
4

1 回答 1

1

由于标准输出默认是行缓冲的,您至少有两种选择:

  1. 在没有换行符的情况下写入标准输出后显式刷新。fflush(stdout);按照 Ganeesh 的建议尝试。
  2. 关闭整个程序的标准输出缓冲。试试setvbuf(stdout, NULL, _IONBF, 0);。你可以在这里看到一个例子:Is it safe to disable buffering with stdout and stderr?
于 2013-02-10T01:28:16.293 回答