我可以使用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;
答案 0 :(得分:2)
不,你不能在非套接字上使用recv
(至少,不可移植或通常)。 FWIW,在某些系统上,select
或poll
可用于监视非套接字,包括用于I / O事件的stdin,读/写可用于套接字和其他流,但是recv / send特别是Berkeley套接字API标准 for socket 的一部分。
Control-C通常会生成一个信号(特别是SIGINT),您可以为其注册信号处理程序,但详细信息是特定于操作系统的。参见例如this answer