私は単純なソケットプログラムを作成して、テキストファイルや画像ファイルをポートに接続された別のソケットに送ります。しかし、ファイルのサイズをクライアントソケットに送信して、受信するバイト数を知りたいとします。ファイルのサイズを表示する[C]
また、ファイル自体の代わりに特定のバイト数を送信できる場所を実装したいと考えています。たとえば、送信したいファイルが14,003バイトで、400バイトを送信するように感じた場合、400バイトしか送信されません。
私はこのような何か実装しています:
#include <stdio.h>
int main(int argc, char* argv[]) {
FILE *fp;
char* file = "text.txt";
int offset = 40;
int sendSize = 5;
int fileSize = 0;
if ((fp = fopen(file, "r")) == NULL) {
printf("Error: Cannot open the file!\n");
return 1;
} else {
/* Seek from offset into the file */
//fseek(fp, 0L, SEEK_END);
fseek(fp, offset, sendSize + offset); // seek to sendSize
fileSize = ftell(fp); // get current file pointer
//fseek(fp, 0, SEEK_SET); // seek back to beginning of file
}
printf("The size is: %d", fileSize);
}
offset
はかなりのファイルに40のバイトを移動して、他のプログラムにどんなsendSize
バイトを介して送信しようとしています。
5
の代わりに0
という出力が得られます。これの背後にある理由?
'#include'で 'sendfile'(例えば' man sendfile'を見てください)を見てください。オフセット/転送で何をしているのですか? –
あなたの 'whence'は正しくありません。 'fseek(fp、sendSize、SEEK_SET);' –
@ DavidC.Rankinいいですね。しかし、もし私が 'sendfile'の代わりにこのメソッドを使いたいのであれば、できますか?私はすべてのサイズを設定する面で見えると思う。 –