반응형

파일 입출력 함수

 

 

※ 파일 열기 

 

데이터를 읽거나 쓰기 위해서 파일을 열 때 사용하는 함수이다.

 

성공 시 파일 디스크립터 부여, 실패 시 -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로 끝나는 자료형에 대해서 알아보자.

반응형

+ Recent posts