[Get_next_line] 기본 개념 - read()함수와 정적변수

Cadet_42·2021년 6월 18일
0

Get_next_line

목록 보기
1/3

Get_next_line : read()함수

1. read()함수

ssize_t read(int fd, void *buf, size_t bytes)

  • ssize_t : signed size type의 약자로, 보통의 32bit machine에서는 간단히 말해 int다.
  • read()함수란? bytes 수 만큼 fd를 읽어 buf에 저장한다.
  • 리턴값 :
    성공시, 읽어온 바이트 수를 리턴함.
    0 (EOF) 파일을 끝까지 읽었으면, 다음번에는 더 이상 읽을 바이트가 없으므로 0을 반환함.
    -1 : 실패시 -1을 반환

------------------- read()함수의 파라미터들 -------------------

2.fd (file descriptor)

운영체제가 만든 파일 또는 소켓의 지칭을 편히 하기 위해서 부여된 숫자이다. 시스템으로 부터 할당 받은 파일이나 소켓을 대표하는 음의 아닌 정수이다.
기본적으로 파일 디스크립터는 정수형으로 차례로 넘버링 되고 0,1,2는 이미 고정 할당되어 있어서 파일 오픈 or 소켓 생성시 부여되는 파일 디스크립터는 3부터 시작한다.

0 : Standard Input (표준 입력)
1 : Standard Output (표준 출력)
2 : Standard Error (표준 에러)

fd의 최대값 : OPEN_MAX 라는 값이다.
즉, 하나의 프로세스 당 최대 OPEN_MAX개의 파일을 열 수 있다. OPEN_MAX 값은 플랫폼에 따라 다르다.

< OPENMAX 확인 하는 방법>
**터미널에서 getconf 명령어로 확인
**

3. buf()

  • 파일에서 읽어들인 입력값을 저장할 버퍼를 의미한다. 어떤 자료를 읽어올지 몰라서 기본적으로 void* 가 매개 변수로 결정되어 있다.
  • int형 자료를 입력받고자 한다면 buf를 int형 배열로 선언해준 후 매개변수로 넣어주면 되고, char형 자료를 입력받고자 한다면 buf를 char형 배열로 선언해준 후 매개변수로 넣어주면 된다.

4. nbytes

  • read()함수에서 얼마만큼 읽어올지를 결정한다. size_t는 unsigned int 형태의 변수를 선언한다. 고로, 절대 음수가 될 수 없다.

< read 함수의 사용법 >

5. Static variable (정적 변수)

  • 정적 변수는 프로그램이 종료되지 않는 한 메모리가 소멸되지 않는다 (정적변수의 lifetime - 프로그램이 죽을때 까지).

  • static 이라는 키워드가 반드시 붙으며, 해당 변수가 선언된 scope에 따라서 접근 가능한 범위가 결정된다. 하기와 같이 선언됨.
    static char buf[BUFFER_SIZE]

  • 다른 파일에서는 접근 할 수 없으며, 오직 해당 파일 내에서만 scope에 맞게 접근이 가능하다.

  • 정적 변수는 초깃값을 지정하지 않으면 0으로 자동 초기화 된다. 또한 초기화 할때 반드시 상수로 초기화 해야 한다.

  • 정적 변수(전역, 지역)는 프로그램이 시작될 때 생성 및 초기화되고 프로그램이 끝날 때 사라진다.

출처 :
https://mong9data.tistory.com/111
https://velog.io/@hidaehyunlee/GetNextLine-%EC%82%BD%EC%A7%88%EC%9D%98-%EA%B8%B0%EB%A1%9D
https://code4human.tistory.com/123
https://chfhrqnfrhc.tistory.com/entry/%EC%A0%84%EC%97%AD%EB%B3%80%EC%88%98%EC%99%80-%EC%A0%84%EC%A0%81%EB%B3%80%EC%88%98

profile
안녕하세요! 개발공부를 하고 있습니다. 감사히 배우겠습니다. ;)

0개의 댓글