chcę zrobić asynchronicznego odczytu z cin dlatego mam kawałek koduStrange rzut wyjątek - przypisanie: Operacja niedozwolona
client.h
...
boost::asio::posix::stream_descriptor input;
boost::asio::streambuf input_buffer
client.cpp
Client::Client(int argc, char **argv, boost::asio::io_service &io_service)
: tcp_socket(io_service)
, udp_socket(io_service)
, input(io_service, ::dup(STDIN_FILENO))
{
...
read_std_input();
}
void Client::read_std_input() {
async_read_until(input, input_buffer, '\n',
boost::bind(&Client::handle_std_read, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
Problem polega na tym, że kiedy uruchamiam mojego klienta w normalny sposób [./client], a następnie wprowadzam coś za pomocą polecenia, to działa jak urok. Jednak, kiedy go uruchomić poprzez [./client < test] rzuca:
terminate nazywany po wrzuceniu wystąpienie 'boost :: exception_detail :: clone_impl
' co() : przypisanie: Operacja niedozwolona Przerwano
Czy masz pomysł, co może być problem? Dzięki!
Nie wspomniano o platformie, z której korzystasz. Obsługa asynchronicznych operacji wejścia/wyjścia plików jest bardzo różna w systemach Windows i Linux (i ...). –
im przy użyciu linuksa miętowego 16 64bit – darenn
Spójrz na strace, aby zobaczyć, co może narzekać system operacyjny. – sehe