Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxネットワーク・プログラミング - 完全な読み取りおよび書き込み機能

Linuxネットワーク・プログラミング - 完全な読み取りおよび書き込み機能

  

Computer shop news

1書き込み関数write ssize_t write(int fd、const void * buf、size_t nbytes)bufのnbytesバイトの内容をファイル記述子fdに書き込みます。書き込まれたバイト数失敗した場合は-1を返し、errno変数を設定しますネットワークプログラムでは、ソケットファイル記述子に書き込むときに2つの可能性があります1)writeの戻り値が0より大きく、書き込まれていることを示します。一部または全部のデータ2)戻り値が0未満エラーが発生した場合エラーの種類に応じて処理する必要があるエラーがEINTRの場合は書き込み中に割り込みエラーが発生したことを、IPIPEはネットワーク接続が発生したことを示す問題(相手方が接続をクローズした)上記の状況に対処するために、これらの状況を処理するための書き込み関数を作成しますint my_write(int fd、void * buffer、int length){int bytes_left; int written_bytes; char * ptr; ptr = buffer; bytes_left = length; while(bytes_left> 0){/*書き込み開始* /written_bytes = write(fd、ptr、bytes_left); if(written_bytes< = 0)/*エラー* /{ if(errno == EINTR)/*割り込みエラー* /written_bytes = 0を書き続けます; else /*他のエラーへの道はありません、* /return(-1);} bytes_left- = written_bytes; ptr + = written_bytes; /*残りの場所から書き込みを続ける* /} return(0);} 2読み取り関数の読み取りssize_t読み取り(int fd、void * buf、size_t nbyte)読み取り機能は、fdの内容の読み取りを担当します。読み取りが実際の読み取りバイト数を返し、戻り値が0の場合はファイルの終わりが読み取られ、0未満の値はエラーが発生したことを示し、エラーがEINTRの場合は読み取りは割り込みによって発生します。 int my_read(int fd、void * buffer、int length){int bytes_left; int bytes_read; char * ptr; bytes_left = length; while(bytes_left> 0) ){bytes_read = read(fd、ptr、bytes_read); if(bytes_read< 0){if(errno == EINTR)bytes_read = 0; else return(-1);} else if(bytes_read == 0)break; bytes_left- = bytes_read; ptr + = bytes_read;}​​ return(length-bytes_left);} 3上記2つの関数によるデータ転送たとえば、次のようにして、/* clientがサーバーに書き込むことができます* /struct my_struct my_struct_client; write(fd、(void *)&) My_struct_client、sizeof(struct my_struct); /*サーバサイド読み込み* /charバッファ[sizeof(struct my_struct)]; struct * my_struct_server; read(fd、(void *)buffer)、sizeof(struct my_struct)); my_struct_server =(struct) My_struct *)buffer;ネットワーク上でデータを渡すとき、通常、データをchar型のデータに変換します受信時にも同じことが言えます(ネットワーク上でポインタを渡す必要はありません)。コンテンツへのポインタを渡す必要があります)

Copyright © Windowsの知識 All Rights Reserved