소켓을 통해 네트워크에서 데이터를 수신하여 파일에 기록하는 프로그램을 작성했습니다. 나는 목적을 위해 다음 코드를 사용했습니다 : 파일이 존재 doesnot 경우fwrite 및 fprintf가 C에서 작동하지 않습니다.
FILE *log;
log = fopen("time.log", "a");
fprintf(log,"HI all");
while(1)
{
sin_size = sizeof(struct sockaddr_in);
connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);
printf("\n I got a connection from (%s , %d)", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
fflush(stdout);
while(1)
{
fflush(stdout);
fgets(send_data,1000,stdin);
send(connected, send_data,strlen(send_data), 0);
bytes_recieved = recv(connected,recv_data,1024,0);
recv_data[bytes_recieved] = '\0';
char newln[2]="\n";
int len=strlen(recv_data), len1=strlen(newln);
fwrite(recv_data, len, 1, log);
fwrite(newln, len1, 1, log);
fflush(stdout);
}
}
fclose(log);
는 fopen을 성공적으로 파일을 생성하지만 아무 일도 발생하지 않습니다 후. 파일에 데이터가 기록되지 않습니다. neigther "HI all"도 수신 된 데이터도 아닙니다. 예, 데이터가 수신되고 있습니다. 수신 한 데이터를 인쇄하여 확인했습니다. 제발 도와주세요. 미리 감사드립니다. 운영 플랫폼은 리눅스입니다.
시도해 보셨습니까? fflush (log); – Wernsey
아니요, fflush (stdout)를 사용했습니다. 나는 그것을 제거해야합니까? –
예,'fflush (stdout)'을'fflush (log)'로 바꾸십시오 - 샘플은'stdout'에 아무것도 쓰지 않으므로'fflush (stdout)'은 필요하지 않습니다. 'fflush (log)'는 버퍼에 남아있는 어떤 것도'log'에 쓰게합니다. – Wernsey