일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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언어
- 시그널
- radare2
- 워게임
- 커널
- Pwnable.kr
- 시스템프로그래밍
- 어셈블리어
- pwn.college
- 시스템해킹
- 리눅스
- 리버싱
- pwncollege
- write up
- 알고리즘
- 시스템
- 취약점
- css
- 프로그래밍
- wargame
- C++
- 드론
- Leviathan
- 시스템 프로그래밍
- px4
- 컴퓨터구조
- kernel
- 리눅스커널
- Bandit
- 리눅스 커널
- Today
- Total
Computer Security
#6 저수준 파일 열기/닫기, 스트림 포지션 본문
파일 열기
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
파라미터
- pathname : 파일 경로
- flags : 접근 모드를 포함한 여러 가지 플래그
- mode : 파일 생성 시 설정할 권한
반환 값
- 성공 시 열린 파일 디스크립터(fd)
- 실패 시 -1
fopen과 open 의 차이?
open() 함수와 fopen() 함수의 차이는 라이브러리에 있다.
open() 함수는 POSIX.1 규정에 준수하는 시스템 함수로, open() 함수는 커널수준에서 동작한다.(저수준 레벨)
fopen() 함수는 ANSI-C 규정에 준수하는 라이브러리 함수로, 컴파일러에 의해 표준 라이브러리를 사용하여 동작하므로 어플리케이션 수준에서 동작한다.
파일 열기 - 플래그
파일 열기 - 권한
ex) S_IRWXU : S_I 는고정이고, Read Write eXecution 을 User에게 -> S_IRWXU 이런식으로 해석 할 수 있다.
숫자를 이용해서도 설정 할 수 있다! -> 622 --> 유저에겐 읽기,쓰기권한, 그룹에겐 쓰기권한, other에겐 쓰기권한을
Value값을 이용해서 편히 설정 할 수 있다.
파일 닫기
int close(int fd);
파라미터
- fd : 파일 디스크립터
반환 값
- 성공 시 0
- 실패 시 -1
파일 포지션 - offset 설정
off_t lseek(int fd, off_t offset, int whence);
파라미터
- fd : 파일 디스크립터
- offset : 오프셋 값(양수/음수 모두 가능)
- whence : 오프셋의 기준
- SEEK_SET : 파일의 시작 기준
- SEEK_END : 파일의 끝 기준
- SEEK_CUR : 현재 파일 포지션의 기준
반환 값
- 성공시 완료 후 파일 포지션(offset값)
- 실패시 -1
파일 포지션 - 현재 offset 가져오기
저수준레벨 에서는 ftell() 과 같은 API가 없다.
하지만, 아래와 같이 현재 오프셋을 가져올 수 있다.
cur_offset = lseek(fd, 0, SEEK_CUR);
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#8 저수준 파일 문자/문자열 읽고 쓰기 (2) | 2022.09.13 |
---|---|
#7 저수준 파일 열기/닫기, 스트림 포지션 (실습) (0) | 2022.09.12 |
#5 파일 읽고 쓰기 (실습) (0) | 2022.09.10 |
#4 파일 읽고 쓰기 (0) | 2022.09.09 |
#3 파일 포지션 (0) | 2022.09.08 |