gpt4 book ai didi

c - 多线程应用程序中的 printf 笑话?

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:49 25 4
gpt4 key购买 nike

下面的代码怎么可以

while(1) {
client_name_len = sizeof(struct sockaddr_in);
newsockfd = accept(sockfd, (struct sockaddr *)&client_name, &client_name_len);
if (newsockfd < 0) {
perror("ERROR on accept");
printf("Finished\n");
close(sockfd);
exit (EXIT_FAILURE);
}
printf("a:");
pthread_t thread1;
int *addr = (int*)malloc(sizeof(int));
*addr = newsockfd;
pthread_create( &thread1, NULL, &ProcessClient, (void*)addr);
}

产生以下输出:

a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:ERROR on accept: Too many open files
a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:Finished

问题在于 perror("ERROR on accept")printf("Finished\n")printf("a:") 在同一个线程中执行,但输出是混合的。

ProcessClient 不输出任何内容,也不创建任何线程。sockfd 是一个标准的监听 tcp 套接字。

最佳答案

printf("a:");printf("Finished\n"); 是缓冲 I/O 到标准输出。

perror("ERROR on accept"); 未缓冲(或立即刷新)到 stderr 的 I/O。

所以在 ERROR on accept: Too many open files 之后出现的许多 a: 实际上是 printf()' ed 之前,但缓冲会使它们稍后显示在控制台上。

参见 https://stackoverflow.com/a/3746795/12711了解详细信息和解决问题的方法。

关于c - 多线程应用程序中的 printf 笑话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com