簡體   English   中英

使用socket recv函數在stdin上讀取流

[英]Use socket recv function for reading the stream on stdin

我可以使用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; 

不,您不能在非套接字上使用recv (至少,不是可移植或常見的)。 在某些系統上,FWIW可以使用selectpoll來監視非套接字,包括用於輸入/輸出事件的stdin,並且可以在套接字和其他流中使用讀/寫,但是recv / send是Berkeley套接字API的一部分插座標准。

Control-C通常會生成一個信號(特別是SIGINT),您可以為其注冊信號處理程序,但是細節是特定於OS的。 參見例如這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM