当我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>计数作为具有静态持续时间的这种对象的至少一个初始化.默认情况下,
cout与stdout(参见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)