1

を使用して特定の文字に到達するまで、ソケットからバッファに読み込もうとしていますread(fd, buf, BUFFLEN)

たとえば、ソケットは1回の読み取り呼び出しで空白行で区切られた2つのロットの情報を受け取ります。

読み取り呼び出しをループに入れて、この空白行に達すると停止し、必要に応じて後で残りの情報を読み取ることができるようにすることはできますか?

4

2 に答える 2

4

簡単な方法は、前のバイトと現在のバイトが改行文字になるまで、一度に 1 バイトずつ読み取ることです。2 つの連続する改行文字は空白行であるためです。

size_t buf_idx = 0;
char buf[BUFFLEN] = { 0 };

while (buf_idx < BUFFLEN && 1 == read(fd, &buf[buf_idx], 1)
{
    if (buf_idx > 0          && 
        '\n' == buf[buf_idx] &&
        '\n' == buf[buf_idx - 1])
    {
        break;
    }
    buf_idx++;
}

新しく送信されたデータを読み取る場合、未読のデータはいずれかの時点で読み取る必要があります。

于 2012-02-22T16:09:27.093 に答える
0

後でこの情報にアクセスする場合は、ソケットから読み取る必要があります。そうしないと、情報が失われます。最良の実装は、ソケットからの読み取りをループし続けることですが、空白のようなものが受信されたときに必要な操作を実行するために別のプロセス/スレッドが起動されます。

于 2012-02-22T16:10:25.767 に答える