Computer Security

#9 저수준 파일 문자/문자열 읽고 쓰기 (실습) 본문

리눅스 시스템 프로그래밍

#9 저수준 파일 문자/문자열 읽고 쓰기 (실습)

쿠리 Kuri 2022. 9. 14. 18:30
반응형

byte stream을 저장하는 방식 write,read, pwrite, pread를 이용해서 데이터를 저장하고 읽어보자.

 

 


 

첫번째. 정보 쓰기

 


1. 기본 뼈대를 작성 해준다.

main

 

 

 

 


2. 이름과 나이를 저장하는 struct 를 선언한다.

person

 

 

 

 


3. 파라미터로 struct person 포인터를 받아오도록 하는 write_info 라는  API를 만든다.

write_info

 

open 함수

 

없으면 생성하고(O_CREAT) , 쓰기권한을 가지면서(O_WRONLY), 파일 뒷쪽에 APPEND 하게끔 해주고(O_APPEND) , 권한은 644로(0644) 설정해준 뒤, 예외처리 해준다.

 

 


write 함수

 

1. wirte() 함수에서는 첫번째 fd , 두번째 버퍼(사람정보p) , 세번째는 할당 메모리 를 선언 해준다.

write(fd, p, sizeof(struct person));

2. write API 의 return 값은 ssize_t 이기 때문에,  아래처럼 선언 후, ret을 정의 해준 뒤, 예외처리를 해준다.

ssize_t ret;

3. 예외처리는 1. 완전히 실패하는 경우   2. 일부분만 써지는 경우로 나누어서 예외처리해준다.

 

 

 


close API를 통해 열린파일을 닫아준다.

 

 

 

 


4. main 함수에서  가변길이 배열 선언 후, write_info 함수를 호출해준다. 

main

두명을 저장해주었으니, write_info를 두번 호출 해준다. (포인터로 넘기기 때문에 주소로 넘겨준다.)

 

 

 

 


두번째. 정보 읽기

 


5. 파일에서 정보를 읽어서 화면에 출력하는 함수인 dump_info 를 작성해보자.

 

파일을 열어서 struct person 만큼 데이터를 읽어서 화면에 출력하면된다.

 

 


open함수

생성하는게 아니기 때문에 O_CREAT 가 필요하지않고, O_WRONLY 대신 O_RDONLY 가 필요하며, O_APPEND 또한 필요하지않고, 권한도 필요하지 않다.

 

 


read

ssize_t read(int fd, void *buf, size_t count);

struct person p; 를 선언 해주고 써주자.

여기서, read 함수는 file에 끝을 만났을때는 0을 리턴해주기 때문에 예외처리를 하나 더 해준다.

 

 


printf 함수로 읽어와준다.

 


do while을 이용해서 ret 이 sizeof(struct person)과 같을동안 돌려줄텐데, 결국 무한루프 형태고, 파일에 끝에 갔을땐 어차피 종료 될테니 while(1) 로 해주자.

 

 

 

 

 


마무리

 


6. 완성된 전체 코드이다.

 

 

 

 

 

 


7. gcc 명령어를 이용해 컴파일 해준 뒤, ./read 명령어를 입력해 결과 값을 확인 해보자.

정상 출력된다.!

반응형
Comments