Syllabus 13강의에서 의문점이 생겼는데
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 40
int main(int argc, char* argv[])
{
FILE* in, * out;
int ch;
char name[LEN];
int count = 0;
if (argc < 2)
{
fprintf(stderr, "Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
if ((in = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "I couldn't open the file \"%s\"\n", argv[1]);
exit(EXIT_FAILURE);
}
strncpy(name, argv[1], LEN - 5);
name[LEN - 5] = '\0';
strcat(name, ".red");
if ((out = fopen(name, "w")) == NULL)
{
fprintf(stderr, "Can't create output file.\n");
exit(3);
}
while ((ch = getc(in)) != EOF)
if (count++ % 3 == 0)
putc(ch, out);
if (fclose(in) != 0 || fclose(out) != 0)
fprintf(stderr, "Error in closing files\n");
return 0;
}
이러한 코드가 있었는데
왜 .red가 확장자명으로 들어가나요?
txt파일 안에 .red라는 문자열을 추가해야하는것 아닌가요?
왜 파일의 제목부분에 .red가 가는지 이해가 되지 않습니다.
cmd(명령 프롬프트)에서 "main.c 경로 파일이름" 을 입력하면 파일이름.red라는 파일을 생성하고 그 안에서 %3==0 번째 글자를 적는 코드입니다.
txt파일은 현재 읽는 데 사용하고 있으므로 동시에 쓰는 것이 불가능합니다.
그래서 쓰기전용 .red라는 파일을 만들고 그 안에서 작업하게끔 만드셨네요
대부분의 프로그램은 파일 입출력 처리를 할 때는 원본을 직접 건드리지 않고 임시 파일을 만들어서 작업한 다음에 임시파일을 덮어씌우는 방식으로 만들어 안정성을 높입니다. 만들어긴 .red를 txt로 덮어씌우면 의도한 방식대로 만들어질 것 같습니다