2016-10-08 97 views
0

我想通过Linux上的TCP套接字接收文件。但我只是得到一个空文件。但是,当我删除第1行(while)时,任何事情都会好起来的。我在服务器上的代码如下所示:C - 将函数fwrite()写入循环时写入文件faild

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(“A”)出来的,如果( ),我可以在屏幕上看到一些“a”。所有数据将通过套接字传输。new_server_socket_fd

+0

'fwrite()'假定文件以二进制模式打开。你已经在文本模式下打开它(默认)。在文本模式下打开的一个可能的后果就是你所看到的。此外,在外循环内,有必要关闭文件 – Peter

+0

@Peter。正如我记得文本模式是一个事情。在Unix中,文本就是它是否具有托架控制字符。我忽略了什么? – EvilTeach

+0

[C函数fwrite()不能写入文件中]的可能重复(http://stackoverflow.com/questions/29172591/c-function-fwrite-doesnt-write-in-file) – EvilTeach

回答