일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- C언어
- css
- write up
- 시스템해킹
- 드론
- kernel
- pwn.college
- 취약점
- 워게임
- 시스템 프로그래밍
- 컴퓨터구조
- Leviathan
- 어셈블리어
- 시그널
- Pwnable.kr
- 리버싱
- 시스템
- 커널
- 시스템프로그래밍
- 리눅스커널
- wargame
- radare2
- 리눅스 커널
- C++
- 리눅스
- 프로그래밍
- Bandit
- pwncollege
- 알고리즘
- px4
- Today
- Total
Computer Security
#2 파일 열기/닫기 본문
파일 열기
FILE *fopen(const char *pathname, const char *mode);
파라미터
- pathname : 파일 경로
- mode : 파일 열기 모드(파일을 어떤 방식으로 열건지)
반환 값
- 성공 시 :열린 파일 포인터(stream)
- 실패 시 :NULL 포인터 반환
파일 열기 모드
모드 별로 읽기 권한과 쓰기 권한을 따로 허용을 요청하게 되어있다.
읽기나 쓰기만 필요한 경우도 있고 읽기와 쓰기 모두 필요한 경우도 있기에 자신이 필요한 모드를 결정할 수 있다.
파일 포지션은 파일을 열 때, 파일 포인터의 위치를 어느 위치에 놓을 것인지를 결정하는 것이다.
파일의 시작에 놓을 수도 있고 끝에 놓을 수도 있다.
또, 파일의 존재 여부에 따라 r 모드의 경우에는 존재된 파일이 없으면 열기에 실패하지만, w와 a는 새로운 파일을 생성하게 할 수 있다.
w는 기존 파일이 존재할 경우 기존 파일을 제거 후 새 파일을 생성한다.
r은 read, w는 write, a는 append의 약자이다.
r는 읽기만을 요청하고 w는 쓰기만을 요청하는 모드이다. a는 기존 파일에 내용을 덧붙일 수 있다.
w+, r+, a+는 읽기와 쓰기 모두 가능하다. 서로 다른 점은 위의 표를 보면 확인할 수 있다.
파일 닫기
int fclose(FILE *stream) ;
파라미터
- stream : 열린 파일 포인터
반환 값
- 성공시 0
- 실패시 EOF
파일 오픈 후 파일에 내용을 저장하는 함수
fputs(const cahr *s, FILE *stream);
파일 내용을 읽어오는 함수
fgets(char *s, int size, FILE *stream);
파라미터
- char *s : 파일 내용을 읽어올 버퍼
- int size : 이 버퍼의 사이즈
- FILE *stream : 어떤 파일에서 읽어 올 것인지를 나타낸 파일포인터
실습1
1. file_open.c 라는 예제 코드를 작성해보자.
위의 코드는 파일 오픈 예제 코드이다.
2. gcc 명령어를 이용해 컴파일 해준다.
3. ./file_open 명령어를 이용해 실행 시켜준다.
위와 같이 ./file_open 같은경우는 실행했을 경우, 아무런 반응이 없어 보이지만, data 파일이 생긴걸 알 수 있다.
4. cat 명령어를 이용해 data 파일을 읽어준다.
실습 2
써놓은 파일에 읽는 함수를 작성 해보자.
1. read_from_file 함수를 추가 해주자.
위와 같이 read_from_file 함수를 만들어 주자.
아까는 w 를 사용했지만, 여기선 r을 쓴 것을 알 수 있다.
2. gcc 명령어를 이용해 컴파일 해주자.
3. ./file 명령어를 통해 실행 시켜주자.
이번엔 data 파일을 읽지 않아도, 바로 보이는 것을 알 수 있다.
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#6 저수준 파일 열기/닫기, 스트림 포지션 (0) | 2022.09.11 |
---|---|
#5 파일 읽고 쓰기 (실습) (0) | 2022.09.10 |
#4 파일 읽고 쓰기 (0) | 2022.09.09 |
#3 파일 포지션 (0) | 2022.09.08 |
#1 리눅스 시스템 시작 (0) | 2022.09.06 |