前提・実現したいこと
cで通信するためにreadの関数を使用しています。
サーバーから文字列を受信するのですが
readから返ってくるバイト数とbufのバイト数の違いが分かりません。
bufはstrlen(buf)で数えています。
例:文字列が-9878の場合
readのバイト数は6, bufのバイト数は5でした。
readのバイト数が1多いのはbufの終端文字を数えているためでしょうか。
該当のソースコード
ssize_t read(int fd, char *buf, size_t count);
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
JM Projectから少しコードを引用
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/read.2.html
「bufのバイト数」はどうやって数えましたか?
「readから帰ってくるバイト数」はまだreadの返り値だとわかりますが、「bufのバイト数」は意味不明です。strlenの返り値のことでしょうか。
区切りがわかるように終端の'\0'をつけて送られた文字列を受信し、bufはstrlen()で数えたんじゃないですか?
で、readは実際に受信した'\0'を含めた6バイト、strlen()は'\0'をカウントしないので5が返ったと。
bufはstrlenで返しています
サーバー側から例えばsendまたはwrite(socket, "-9878", 6); と送信したらこのようなケースになる、と言い換えたら分かるでしょうか。
はい!分かりました
回答3件
あなたの回答
tips
プレビュー