2016-10-08 10 views
0

Я хочу получить файл через сокет TCP в Linux. Но я просто получаю пустой файл. Однако, когда я удаляю строку 1 (пока), все будет хорошо. Мой код на сервере выглядит следующим образом:C - записать в файл сбой при установке функции fwrite() в цикле

while(1) 
{ 



    FILE *fp = fopen(file_name, "w"); 
    if(NULL == fp) 
    { 
    printf("File:\t%s Can Not Open To Write\n", file_name); 
    exit(1); 
    } 

    bzero(buffer, BUFFER_SIZE); 
    int length = 0; 
    while((length = recv(new_server_socket_fd, buffer, BUFFER_SIZE, 0)) > 0) 
    { 

    if(fwrite(buffer, sizeof(char), length, fp) < length) 
    { 
     printf("File:\t%s Write Failed\n", file_name); 
     break; 
    } 
    bzero(buffer, BUFFER_SIZE); 
} 

Одна вещь, которую я могу убедиться в том, что «если (FWRITE (...))» делать execude, потому что я поставил putchar («а») из, если (), и я могу получить некоторые «а» на экране. Все данные будут переданы через сокет new_server_socket_fd

+0

'fwrite()' предполагает, что файл открыт в двоичном режиме. Вы открыли его в текстовом режиме (по умолчанию). Одним из возможных последствий открытия в текстовом режиме является то, что вы видите. Кроме того, во внешнем цикле необходимо закрыть файл – Peter

+0

@Peter. Как я помню, текстовый режим - вещь dos. В тексте Unix просто указано, имеют ли символы управления каретой. Что я не замечаю? – EvilTeach

+0

Возможный дубликат функции [C fwrite() не записывается в файл] (http://stackoverflow.com/questions/29172591/c-function-fwrite-doesnt-write-in-file) – EvilTeach

ответ