私は学校でC言語(Linux用)でFTPプログラムを書くという仕事を得ました。私はすべての基本的な機能(ls、cd)時間がないで働いているが、私はファイル転送部分に問題があります。私はこのようなソケット経由でファイルを送信するためのsendfile使用:C言語でソケットを介してファイルを送信
int fd = open(temp, O_RDONLY);
int rc = sendfile (client_fd, fd, &offset, statbuf.st_size);
私はクライアント側でこのファイルを受信する方法を見つけ出すように見えることはできません。私はデバッグのために、このようにそれを試してみました:
while((i = read(sock, message, MSG_LEN - 1)) > 0) {
message[i] = '\0';
printf("%s", message);
}
これは、テキストファイルをプリントアウトで良い仕事をしていませんが、私は、バイナリファイルを送信しようとした場合、例えば、それだけで、バイナリファイルやハングの始まりを出力しますread()の部分(サーバーからは何も来ないので、私は思っています)。
ご意見ありがとうございます。受信機は、ファイルの終わりを知っているように、あなたは、ファイルを送信した後にシャットダウンするソケットの書き込み側が必要
ソケット・ディスクリプタが入力で、出力として書き込み用にオープンされたファイルで、sendfileをもう一度試してみてください。 –
BTW /バイナリファイルには、printfのようなCスタイルの関数がASCIIZ NULターミネータや、画面のクリア、カーソルの移動などのASCII制御コードに対応する他の値と間違える可能性がある0バイトを含めることができます。バイトごとに16進数で内容を読むか、または人間が読めるようにして端末に適合させるために他の方法を使用します。 –
fwrite(message、1、i、stdout)を使って、プログラムの出力をシェルからファイルにリダイレクトします。 –