当前位置: 技术问答>linux和unix
一个很奇怪的问题,我研究了几天没结果.大家可以仔细思考一下
来源: 互联网 发布时间:2015-12-15
本文导语: void *readFunction(void *fd) { char buf[100]; int* id_fd = (int *)fd; while(1) { read(*id_fd, buf, sizeof(buf)); puts("Server Say: "); puts(buf); puts("please input string: ")...
void *readFunction(void *fd)
{
char buf[100];
int* id_fd = (int *)fd;
while(1)
{
read(*id_fd, buf, sizeof(buf));
puts("Server Say: ");
puts(buf);
puts("please input string: "); /**记号处*****注意这里***********/
}
return NULL;
}
void *writeFunction(void *fd)
{
char buf[100];
int *id_fd = (int *)fd;
while(1)
{
puts("please input string: ");
gets(buf);
write(*id_fd, buf, sizeof(buf));
}
return NULL;
}
/*首先,这是两个线程函数,服务端与客户端连接成功时在服务端和客户端都加上如下代码
pthread_create(&xaa, 0, readFunction, (void *)&sockfd);
pthread_create(&xbb, 0, writeFunction, (void*)&sockfd);
很自然,服务端与客户端就可以实现简单的在控制台聊天了.
但当我上面记号处代码改成
printf("please input string: ");
在控制台.输出的提示规律就实现发生了明显的变处...反正我也不好描述.
为什么一个printf与puts在这样的地方就有如此大变化????????
这个问题的确不好描述,如果您有兴趣研究这个问题,可以加我MSN:janLex@msn.com
我感觉并不是这么简单...
{
char buf[100];
int* id_fd = (int *)fd;
while(1)
{
read(*id_fd, buf, sizeof(buf));
puts("Server Say: ");
puts(buf);
puts("please input string: "); /**记号处*****注意这里***********/
}
return NULL;
}
void *writeFunction(void *fd)
{
char buf[100];
int *id_fd = (int *)fd;
while(1)
{
puts("please input string: ");
gets(buf);
write(*id_fd, buf, sizeof(buf));
}
return NULL;
}
/*首先,这是两个线程函数,服务端与客户端连接成功时在服务端和客户端都加上如下代码
pthread_create(&xaa, 0, readFunction, (void *)&sockfd);
pthread_create(&xbb, 0, writeFunction, (void*)&sockfd);
很自然,服务端与客户端就可以实现简单的在控制台聊天了.
但当我上面记号处代码改成
printf("please input string: ");
在控制台.输出的提示规律就实现发生了明显的变处...反正我也不好描述.
为什么一个printf与puts在这样的地方就有如此大变化????????
这个问题的确不好描述,如果您有兴趣研究这个问题,可以加我MSN:janLex@msn.com
我感觉并不是这么简单...
|
当涉及到终端设备时,标准IO是行缓存的.当在输入输出中遇到新行符时(也有例外),标准IO执行IO操作.
不加n的话,可以调用函数:fflush(FILE* fp);
不加n的话,可以调用函数:fflush(FILE* fp);