2011-10-26 17 views
1

クライアントからサーバープログラムにオブジェクトファイルを送信する必要があります。 ファイルを読み込み、バッファに格納し、バッファをsslに送り、サーバプログラムのファイルに書き出しました。 これは.oファイルでは機能しませんでした。これはELFを出したものです。オブジェクトファイルを.slとソケット経由で送信する方法

この私のコードの一部

読み取り

void readFile(char filename[]) 
{ 
    FILE  *input_file; 
    char  line[BUFSIZ]; 

    input_file = fopen(filename, "r"); 

    if(input_file == NULL){ 
     printf("cannot open input_file '%s'\n", filename); 
     exit(EXIT_FAILURE); 
    } 

while (fgets(line,sizeof line, input_file) != NULL) { 

    for(int i = 0; i<strlen(line); i++){ 
     current_file[i] = line[i]; 
    } 
}} 

クライアントがファイル

readFile(filename); 
    ctx = InitCTX(); 
    server = OpenConnection(hostname, atoi(portnum)); 
    ssl = SSL_new(ctx);  /* create new SSL connection state */ 
    SSL_set_fd(ssl, server); /* attach the socket descriptor */ 
    if (SSL_connect(ssl) == FAIL) /* perform the connection */ 
     ERR_print_errors_fp(stderr); 
    else 
    { 

     printf("Connected with %s encryption\n", SSL_get_cipher(ssl)); 
     ShowCerts(ssl);  /* get any certs */ 
     SSL_write(ssl, current_file, strlen(current_file)); 

を送信ファイルであるが、それは、オブジェクトファイルを読み込み、その後、バッファに保管することは可能ですか?

これらのファイルを送信する他の方法はありますか?

+1

まず、オブジェクトファイルはバイナリで、 'fopen'に' b'フラグを付けて開く必要があります。第2に、バイナリファイルを読むときに 'fgets'を使うことはできません。その関数はデータをテキストとして解釈し、バイナリデータの値0(文字列終了に使用)または10(改行文字およびバイナリファイル線を持たない)とおそらく他の値もあります。ファイルを読むには 'fread'を使います。 –

答えて

2

.oファイルには特別なものはありません。単にディスクに格納された一連のバイトで、ファイル名と拡張子が割り当てられています。

私の推測では、ファイルがバイナリデータになるため、そこにあるものとは別の方法でファイルを処理する必要があると思います。それはあなたが現在で読んでいる行の「通常の」という概念を持っていません

私は、次のを見てしたい:。 http://www.linuxquestions.org/questions/programming-9/c-howto-read-binary-file-into-buffer-172985/

かをチェックするために最初にローカルファイルを読み書きしてくださいそれが通過中にローカルI/Oルーチンで壊れているかどうか?

+0

良い返信のためにお元気です..ここに、作業中の読み書き機能に - > [リンク](http://www.sourcepod.com/tyluao20-5853)があります。 – ettan

0

これは、「オブジェクト」のようなバイナリファイルをバッファするためのサンプルコードです。チェックやポインタのメンテナンスは簡潔にはありません。

FILE *file; 
char *buffer; 
unsigned long len; 
unsigned char buffer*; 
//open in binary mode 
file = fopen(name, "rb"); 
//check file size 
fseek(file, 0, SEEK_END); 
len = ftell(file); 
fseek(file, 0, SEEK_SET); 
//allocate buffer accordingly 
buffer = (unsigned char *) calloc (1, fileLen + 1); //1 byte for the terminator 
//Store into buffer 
fread(buffer, len, 1, file);