C言語をこちらの記事を参考に
学んでいます。
その過程の中で分からないところがあったのでお願いします。
c
1 2void send_input_data(int sockfd) { 3 4 char buf[128]; 5 6 int buf_len; 7 8 while(1){ 9 10 buf_len = read(0, buf, 1); 11 12 write(sockfd, buf, buf_len); 13 14 } 15 16} 17 18 19この中の 20 21buf_len = read(0, buf, 1);
が理解できません。
read関数の使い方
ここを読むと
string
1read() 関数は、ファイル記述子 fs で表されるファイルか ら、buf で表されるメモリー域に、入力の N バイトを 読み込みます。read() が正常に実行されると、ファイルのアクセス時刻が更新さ れます。 2 3 4buf_len = read(0, buf, 1);
つまりそのまま解釈するなら
0から変数(?)bufに対して1バイトを読み込む・・・となると思うのですが
ここで不明点が2つあるのでお願いします。
#質問1readについてそもそもの話
(いままでRubyの標準入出力でファイルを操作したくらい・・・)
そもそもの
c
1read() 関数は、ファイル記述子 fs で表されるファイルか ら、buf で表されるメモリー域に、入力の N バイトを 読み込みます。read() が正常に実行されると、ファイルのアクセス時刻が更新さ れます。 2
この意味自体が理解できないです。
ファイル記述子 fs で表されるファイルか ら・・・
とありますがこれは
指定したファイルからバイトを抜き取る ということですか?(それでもちょっとわからない)
buf で表されるメモリー域に、入力の N バイトを 読み込みます。・・・
とありますが
buf変数?は初期化された時点で4バイト分のメモリが確保されているのですよね?
その4バイトに対してNバイトを埋め込む
どういうイメージなんでしょうか?
#質問2 readの第一引数について
readの第一引数はファイルを指定するのだと思うのですが
ここでは0が記述されています。
c
1void send_input_data(int sockfd) { 2 3 char buf[128]; 4 5 int buf_len; 6 7 while(1){ 8 9 buf_len = read(0, buf, 1); 10 11 write(sockfd, buf, buf_len); 12 13 } 14 15} 16 17 18↑ この中の 19buf_len = read(0, buf, 1); 20第1引数に0が指定されています。
0だとどのような処理になるのでしょうか?
質問1が理解できないとファイルの操作は難しそうなので理解したいのですが・・・。
このようなファイルに関してのいい記事はないでしょうか?
分からないので参考になるリンクまたは説明をお願いします。
追記
string
1int read(int scoket, char *buf, int length) 2 3第一引数socketの返値であるソケット番号です。第二引数 bufは受信したデータを格納するための領域であり、第三引数 lengthは一回のread()の実行で受信するデータのバイトに なります。このため、第二引数bufはlengthバイト以上の 領域でなければいけません。システムコールread()の返値は実際に 受信したデータのバイト数となります。ここで、返値は第三引数 lengthより小さくなることに注意してください。これは第三引数 lengthバイト分を受信しようとしたのに、サーバ側からの送信デー タ量はlengthより小さく、返値分のバイト数しかなかった場合です。 なお、受信に失敗した場合は-1を返します。
このような説明があったのですが・・・
回答3件
あなたの回答
tips
プレビュー