2016-10-08 3 views
0

Linux의 TCP 소켓을 통해 파일을 받으려고합니다. 그러나 나는 빈 파일을 얻는다. 그러나 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 ('A'를) 넣어 않는다는 것입니다 (: 서버 내 코드는 다음과 같습니다) 그리고 나는 나의 스크린에 약간의 "a"를 얻을 수있다. 모든 데이터는 반환하기 전에 소켓 new_server_socket_fd

+0

'fwrite()'는 파일이 바이너리 모드로 열려 있다고 가정합니다. 텍스트 모드로 열었습니다 (기본값). 텍스트 모드에서 열면 가능한 결과 중 하나가 표시됩니다. 또한 외부 루프 내에서 파일 – Peter

+0

@ Peter를 닫아야합니다. 텍스트 모드는 dos 일입니다. 유닉스 텍스트에서 단순히 캐리지 제어 문자가 있는지 여부입니다. 나는 무엇을 간과하고 있는가? – EvilTeach

+0

가능한 [C 함수 fwrite()가 파일에 쓰지 않습니다] (http://stackoverflow.com/questions/29172591/c-function-fwrite-doesnt-write-in-file) – EvilTeach

답변

1

fclose 파일을 통해 전송됩니다.

관련 문제