使用socket recv函数在stdin上读取流

时间:2015-06-04 10:25:31

标签: c++ c sockets tcp

我可以使用socket recv函数来读取stdin的输入流。 即读取Ctrl-C。

像。

int dummy;

ssize_t bytes = recv (0 /* file descriptor for stdin*/ , &dummy, 1, MSG_PEEK);

if (bytes > 0 && dummy == 0x03)
return true; // Ctrl-C receive
else
return false;        // Not

实际上我是通过使用fgetc函数来通知CTRL-C来读取stdin流,但有时fgetc不会通知任何CTRL-C。 如果我使用recv函数作为与fgetc函数的分离,则每个通知CRTL-C的情况都在处理中。

那么我可以使用socket recv函数来读取stdin流吗? 这是我通知CRTL-C事件的完整算法。

ssize_t bytes = recv (data->input, &dummy, 1, MSG_PEEK);

dummy1 = fgetc (stdin)

if ((dummy1 == 0x03) || (bytes > 0 && dummy == 0x03))
    return true;
else
    return false; 

1 个答案:

答案 0 :(得分:2)

不,你不能在非套接字上使用recv(至少,不可移植或通常)。 FWIW,在某些系统上,selectpoll可用于监视非套接字,包括用于I / O事件的stdin,读/写可用于套接字和其他流,但是recv / send特别是Berkeley套接字API标准 for socket 的一部分。

Control-C通常会生成一个信号(特别是SIGINT),您可以为其注册信号处理程序,但详细信息是特定于操作系统的。参见例如this answer