FILE *fopen(const char *pathname, const char *mode);
파라미터
r, r+, w, w+, a, a+
)반환값
모드 | 읽기 | 쓰기 | 파일 포지션 | 파일 존재시 | 파일 부재시 |
---|---|---|---|---|---|
r (read) | O | X | 파일 시작 | 성공 | 실패 |
r+ | O | O | 파일 시작 | 성공 | 실패 |
w (write) | X | O | 파일 시작 | 기존 파일 제거 후 생성 | 생성 |
w+ | O | O | 파일 시작 | 기존 파일 제거 후 생성 | 생성 |
a (append) | X | O | 파일 끝 | 성공 | 생성 |
a+ | O | O | 읽기 : 파일 시작, 쓰기 : 파일 끝 | 성공 | 생성 |
int fclose(FILE *stream)
파라미터
반환값
먼저 file_open.c
파일을 작성합니다.
$ vim file_open.c
#include <stdio.h>
int write_to_file(void) {
FILE *fp;
fp = fopen("data", "w");
if (fp == NULL) {
perror("fopen error\n");
return -1;
}
fputs("hello world..\n", fp);
fclose(fp);
return 0;
}
int main(int argc, char **argv) {
if (write_to_file()) {
perror("write to file\n");
return -1;
}
return 0;
}
컴파일 후 파일을 실행하고 data
파일이 생성된 것을 볼 수 있습니다.
data
파일의 내용을 조회해보면 fputs
로 넣었던 hello world..
이 쓰여져 있는 것을 볼 수 있습니다.
# 컴파일
$ gcc -o file_open.c
$ ./file_open.c
$ ls -al
data file_open.c
$ cat data
hello world..
이번엔 파일을 실행했을 때 data
파일의 문구를 읽어서 터미널에 출력하는 기능을 추가적으로 구현하겠습니다.
#include <stdio.h>
#include <string.h>
int write_to_file(void) {
FILE *fp;
fp = fopen("data", "w");
if (fp == NULL) {
perror("fopen error\n");
return -1;
}
fputs("hello world..\n", fp);
fclose(fp);
return 0;
}
int read_from_file(void) {
FILE *fp;
char buf[1024];
fp = fopen("data", "r");
if (fp == NULL) {
perror("fopen error\n");
return -1;
}
memset(buf, 0, sizeof(buf));
fgets(buf, sizeof(buf), fp);
fclose(fp);
printf("%s\n", buf);
return 0;
}
int main(int argc, char **argv) {
if (write_to_file()) {
perror("write to file\n");
return -1;
}
if (read_from_file()) {
perror("read to file\n");
return -1;
}
return 0;
}
컴파일 후 파일을 실행하면 data
파일이 생성되면서 hello world..
문구가 파일에 쓰여지고 이것을 읽으면서 터미널에 문구가 출력
됩니다.
# 컴파일
$ gcc -o file_open.c
$ ./file_open.c
hello world..