파일 입출력 함수
※ 파일 열기 ※
데이터를 읽거나 쓰기 위해서 파일을 열 때 사용하는 함수이다.
성공 시 파일 디스크립터 부여, 실패 시 -1 반환
이 함수는 두 개의 인자를 전달받는데,
첫 번째 인자로는 대상이 되는 파일의 이름 및 경로 정보를 받고,
두 번째 인자로는 파일의 오픈 모드 정도(파일의 특성 정보)를 전달한다.
-
-
위 open 함수의 두 번째 매개변수 flag에 전달할 수 있는 값과 그 의미는 아래의 사진과 같으며,
하나 이상의 정보를 비트 OR 연산자인 '|'로 묶어서 전달이 가능하다.
( 역슬래쉬 키를 shift를 누른 상태에서 누르면, '|'이 나온다.)
path : 파일 이름을 나타내는 문자열의 주소 값 전달
flag : 파일의 오픈 모드 정보 전달.
-
-
※ 파일 닫기 ※
소켓도 생성해서 사용 후 반드시 닫아줘야 하듯이, 파일도 생성해서 사용 후 반드시 닫아줘야 한다.
그렇기에, 파일을 닫을 때 호출하는 함수 close()가 있다.
성공 시 0 반환, 실패 시 -1 반환
-
-
위 함수를 호출하면서 파일 디스크립터를 인자로 전달하면 해당 파일은 닫히게(종료하게) 된다.
그런데 여기서 중요한 사실은 위 함수는 파일뿐만 아니라, 소켓을 닫을 때에도 사용된다.
(리눅스는 소켓과 파일을 구분하지 않기 때문에 유닉스 또는 리눅스에서만 가능한 것이다.)
fd : 닫고자 하는 파일 또는 소켓의 파일 디스크립터 전달.
(파일 또는 소켓의 파일 디스크립터를 저장하고 있는 변수 이름을 넣는다.)
-
※ 파일에 데이터 쓰기 ※
write 함수는 파일에 데이터를 출력(전송)하는 함수이다.
성공 시 보낸 바이트 수, 실패 시 -1 반환
물론 리눅스에서는 파일과 소켓을 구분하지 않으므로,
소켓을 통해서 다른 컴퓨터에 데이터를 전송할 때에도 이 함수를 사용할 수 있다.
참고로 앞서 보인 서버와 클라이언트 프로그램에서도 Hello World! 문자열 전달을 위해서 이 함수를 사용했다.
-
-
위의 함수선언에서 보이는 size_t는 typedef 선언을 통해서 unsigned int로 정의되어 있다.
그리고 ssize_t의 경우 size_t 앞에 s가 하나 더 붙어있는 형태로, 이는 signed를 의미한다.
즉, ssize_t는 typedef 선언을 통해서 signed int로 정의되어 있다.
_t로 끝나는 자료형에 대해 더 자세한 내용은 다음 포스팅에서 설명한다.
fd : 데이터 전송 대상을 나타내는 파일 디스크립터 전달
buf : 전송할 데이터가 저장된 버퍼의 주소 값 전달
nbytes : 전송할 데이터의 바이트 수 전달
-
※ 파일에 저장된 데이터 읽기 ※
위에 설명만 write 함수의 상대적인 기능을 제공하는 read 함수는 데이터를 입력(수신)하는 기능의 함수이다.
성공 시 받은 바이트 수(단, 파일의 끝을 만나면 0을 반환), 실패 시 -1 반환
-
-
fd : 데이터 수신 대상을 나타내는 파일 디스크립터 전달
buf : 받은 데이터를 저장할 버퍼의 주소 값 전달
nbytes : 받을 최대 바이트 수 전달
-
다음 포스팅에서 _t로 끝나는 자료형에 대해서 알아보자.
'시작하지 말았어야 했던 것 > (Unix, Linux) C Socket' 카테고리의 다른 글
(리눅스) 파일 오픈 프로그램 (0) | 2021.02.02 |
---|---|
_t로 끝나는 자료형 (0) | 2021.02.02 |
(리눅스 기반 파일 조작) 저 수준 파일 입출력과 파일 디스크립터 (0) | 2021.02.02 |
(리눅스) 클라이언트[client] 프로그램 구현 (0) | 2021.02.02 |
(리눅스) 서버[server] 프로그램 구현 (0) | 2021.02.01 |