FTP クライアントを作成しようとしていますが、コマンドに対するサーバーの応答を出力する必要があります。これらのコマンドの 1 つが STAT です。サーバーは応答を返します。私が理解しているように、応答は read() コマンドを使用して読み取ることができるソケットバッファーにあります。問題は、STAT の応答のみが必要なため、END OF STATUS で終了することがわかっていることです。これは、応答を読み取るために私が書いたコードです。
in = read(connFd, &timebuffer, sizeof(timebuffer));;
while(in>0){
printf("%s", timebuffer);
memset(&timebuffer, 0, sizeof timebuffer);
in = read(connFd, &timebuffer, sizeof(timebuffer));
}
memset(&timebuffer, 0, sizeof timebuffer);
私が得ている問題は、 read() 関数がバッファを通過し、 while ループの読み取りが終了すると、ループが終了せず、無限に続くと、プログラムがそこに留まることです。read() 関数がデータを待っているためだと思いますので、バッファの終わりに達したら read() を停止するように指示する方法があるかどうか疑問に思っていました。read() は x<1 を返すため、これは自動的に発生すると思いましたが、待機中の場合は問題が何であるかを理解しています。では、どうすれば修正できますか?timeout(0) を設定して、データが既に存在する場合にのみデータを読み取る方法はありますか? また、0に設定した「フラグ」があることは知っていますが、それらに関する情報はあまり見つかりません。助けていただければ幸いです。唯一の方法は、バッファ内の「END OF STATUS」文字列をチェックすることですか? strstr(buffer) を使用しますか