-1

FIFO を使用してサーバー/クライアント モデルを作成し、クライアントがディレクトリ パスを取得したいのですが、「読み取り: アドレスが正しくありません」および「書き込み: アドレスが正しくありません」というエラーが発生します。

クライアント

サーバーのエラー: "read: Bad address"

クライアントのエラー:「write: Bad address」

4

1 に答える 1

0

おそらく、readとからの戻り値を誤用しているでしょうwrite。成功すると正の値が返され、エラーとして処理されます。

また、文字列のサイズを読み取るときは不明です。不適切strlenです。

 if( (controlRead = read(fdp,pathName,sizeof(pathName)) ) <= 0)
 {
     // error ...

と同条件write

文字列を転送するときは、文字列の長さも転送することをお勧めします。

書き込み:

void write_string(int fd, const char *string)
{
    size_t len = strlen(string);
    write(fd, &len, sizeof(len));
    write(fd, string, len);
}

読む:

void read_string(int fd, char *buffer, size_t size, size_t *len)
{
    size_t t_len;

    read(fd, &t_len, sizeof(t_len));
    if (t_len > size) t_len = size;
    read(fd, buffer, t_len);
    if (t_len < size) buffer[t_len] = 0; // null-terminate if there is enough space
    if (len) *len = t_len; // return length if wanted
}
于 2013-04-21T13:18:29.137 に答える