小编wal*_*sht的帖子

socket()在std :: thread中返回文件描述符1

当我socket()在里面调用std::thread()它时,它返回一个套接字描述符1.调用而std::cout不是将终端文本发送到服务器.当我cout << "";在调用之前添加时socket(),将创建stdin/out/err for的描述符并socket()返回3.

来自http://www.cplusplus.com/reference/iostream/cout/:

在静态初始化顺序方面,cout保证在不晚于第一次ios_base::Init构造类型对象的情况下正确构造和初始化,其中包括<iostream>计数作为具有静态持续时间的这种对象的至少一个初始化.

默认情况下,coutstdout(参见ios_base::sync_with_stdio)同步.

std::cout应该已经初始化并同步到stdout,这解释了为什么要将std::cout消息发送到服务器而不是终端.

我想知道调用是否std::thread()关闭新线程中的stdin/out/err描述符,或者线程中是否存在这些描述符,因为该线程不是由终端或initd创建的?

我使用GCC 4.8.2在RHEL 6.4上运行.我已经在下面添加了我的客户端代码,并附加了cout << "";注释以确保完整性.

Client.cpp:

#include "Client.hpp"

#include <cstdlib>
#include <cstring>
#include <iostream>
#include <thread>
#include <vector>
#include <algorithm>
#include <sstream>
#include <functional>

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>

using namespace std;

Client::Client( const string& …
Run Code Online (Sandbox Code Playgroud)

sockets multithreading c++11

3
推荐指数
1
解决办法
144
查看次数

标签 统计

c++11 ×1

multithreading ×1

sockets ×1