일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 시그널
- radare2
- 취약점
- pwn.college
- 시스템 프로그래밍
- 시스템해킹
- kernel
- 드론
- Pwnable.kr
- 리눅스커널
- 컴퓨터구조
- 리눅스 커널
- write up
- 알고리즘
- pwncollege
- px4
- css
- 워게임
- 리눅스
- 리버싱
- Leviathan
- C언어
- 시스템
- 어셈블리어
- 커널
- 시스템프로그래밍
- Bandit
- wargame
- 프로그래밍
- C++
- Today
- Total
Computer Security
#4 파일 읽고 쓰기 본문
파일 내용 읽고 쓰기
Text mode
- 문자를 저장할 때 사용되는 방식
- "10" 저장시 파일에는 0x31, 0x30이 저장된다.
(텍스트 모드에서 쓰고, 읽을 수 있는 함수)
- fputc/fputs/fprintf
- fgetc/fgets/fscanf
Binary mode
- 데이터를 저장할 때 방식
- 10 저장시 파일에 0x0a 가 저장됨
(바이너리 파일로 쓰고,읽을 수 있는 함수)
- fwrite/fread
리눅스에서는 바이너리 파일과 텍스트 파일의 구분이 없다.
쓰는 함수에 따라서 자동적으로 텍스트 모드로 쓸 것인지 바이너리 모드로 쓸 것인지 결정된다.
파일에 쓰기 - formatted
int fprintf(FILE *stream, const char *format, ...);
파라미터
- stream : 열린 파일 포인터
- format : 출력 포맷
- ...: 가변 arguments
반환 값
- 성공시 쓰여진 바이트 값
- 실패시 음수
파일에서 일기 - formatted
int fscanf(FILE *stream, const char *format, ...);
파라미터
- stream : 열린 파일 포인터
- format : 입력 포맷
- ...: 가변 arguments
반환 값
- 성공시 입력받은 아이템 개수
- 실패시 EOF
포맷 변환1
변환자 | |
d | signed integer |
u | unsigned integer, 10진수 |
o | unsigned integer, 8진수 |
x | unsigned integer, 16진수, (abcde) |
X | unsigned integer, 16진수, (ABCDE) |
s | NULL-terminated string |
f | floating-point, [-]ddd.ddd |
e | floating-point, [-]d.ddde±dd |
포맷 변환2
integer길이 | |
hh | sizeof(char) |
h | sizeof(short) |
(생략) | sizeof(int) |
l (엘) | sizeof(long) |
ll (엘엘) | sizeof(long long) |
포맷 변환 정리
데이터 타입 | 변환자 |
char | %hhd, %hhx |
unsigned char | %hhu, %hhx |
short | %hd, %hx |
unsigned short | %hu, %hx |
int | %d, %x |
unsigned int | %u, %x |
long | %ld(엘디), %lx(엘엑스) |
unsigned long | %lu(엘유), %lx(엘엑스) |
long long | %lld(엘엘디), %llx(엘엘엑스) |
unsigned long long | %llu(엘엘유), %llx(엘엘엑스) |
파일에 쓰기 - character / string
int fputc(int c, FILE *stream);
파라미터
- c : 출력할 character
- stream : 열린 파일 포인터
반환 값
- 성공시 쓰여진 character
- 실패시 EOF
int fputs(const char *s, FILE *stream);
파라미터
- s : 출력할 string(NULL-terminated)
- stream : 열린 파일 포인터
반환 값
- 성공시 0보다 크거나 같은 수
- 실패시 EOF
int fgetc(FILE *stream);
파라미터
- stream : 열린 파일 포인터
반환 값
- 성공시 읽은 character 값
- 실패시 EOF
char *fgets(char *s, int size, FILE *stream);
파라미터
- s : 스트링 버퍼
- size : 버퍼 사이즈
- stream : 열린 파일 포인터
반환 값
- 성공시 캐릭터 포인터(스트링)
- 실패시 NULL
파일에 쓰기 - byte stream
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
파라미터
- ptr : 출력할 byte stream 포인터
- size : 출력 아이템 사이즈
- nmemb : 출력 아이템 개수
- stream : 열린 파일 포인터
변환 값
- 실제로 출력된 아이템 개수
- 완전하게 쓰여졌는지 확인 필요
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#6 저수준 파일 열기/닫기, 스트림 포지션 (0) | 2022.09.11 |
---|---|
#5 파일 읽고 쓰기 (실습) (0) | 2022.09.10 |
#3 파일 포지션 (0) | 2022.09.08 |
#2 파일 열기/닫기 (0) | 2022.09.07 |
#1 리눅스 시스템 시작 (0) | 2022.09.06 |