반응형

스트림 (stream)

직역하면 흐르다 인데, 원래는 물이 흐르는 시냇물을 의미한다.

컴퓨터에서는 데이터의 흐름으로 말한다. 즉, 데이터가 바이트이기에 바이트의 흐름이다.

흐르기 위해서는 통로가 필요하기때문에 통로라고도 부른다.

컴퓨터에서 스트림
: 데이터의 이동 통로 혹은 바이트의 흐름

linux 에서 스트림은 network 를 연결할 때, device 를 연결할 때 process 끼리 소통할 때 사용된다. 

 

linux 는 파일로 모든 것이 이루어져 있기 때문에 파일에 관한 시스템 콜인 open, close, read, write 가 stream 을 다루는 함수가 된다. open 함수는 fd 값을 반환시키는데, fd가 바로 스트림이 된다. (fd 가 파일을 연결시켜주는 통로가 되기 때문에) 

int open(const char* path, int flags, mode_t mode)

 return 값이 int 형인 fd 가 된다. 즉 스트림을 만들어주는 함수가 이 open 함수가 되는 것이다. 

그렇게 fd (stream) 을 받았으면 그 스트림에 데이터를 흘려 보낸다. 어떻게? write 함수로 

ssize_t write(int fd, const *buf, size_t bufsize)

이게 write (스트림, 보낼 데이터, 보낼 데이터의 크기) 가 되는 것이다.

받는 쪽에서는 read 로 읽는다.

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

read (스트림, 읽을 데이터, 읽을 데이터의 크기) 가 된다.

 

close의 경우 스트림을 닫는 역할을 한다. 

int close(int fd)
반응형
반응형

시스템 콜(System Call) 

시스템 콜은 커널에게 요청하는 함수이다. 

커널은 하드웨어와 소프트웨어를 관리하기 때문에, 커널에게 요청해야 할 수 있는 작업들을 하기 위해서 사용하는 것이 시스템 콜 함수이다.

 

예) 프로세스를 생성한다고 가정한다. (프로세스 생성은 fork 함수로 한다)

fork 함수 사용 시

이렇게 시스템 콜 함수인 fork 함수를 사용하면 커널에게 요청을 하게 되고 커널이 그에 해당하는 작업을 해주는 것이다. 

 

API (Application Programming Interface)

 

프로그래밍을 통해 무언가를 사용할 때 인터페이스이다. 인터페이스란 사용자와 소통하는 창구이다. 맨날 글로만 읽어서 소통하는 창구인지는 알겠으나 와닿는 개념이 아니라서 따로 정리를 해놔야겠다... 음.. 예를 들자면 음식점 직원 같다. 

음식을 어떻게 주문하는 지?, 어떤 음식이 있는 지?, 화장실은 어디있는지? 처음 가는 식당의 경우 잘 알지 못한다. 따라서 그 음식점을 사용하기 위한 창구로 직원과의 소통을 얘기할 수 있을 것 같다. 이런 것들을 인터페이스(Interface)라고 한다. 따라서 커널과 소통하기 위한 함수로 시스템 콜 함수가 있는 것이다. "즉, 커널의 API는 시스템 콜이다" 라고 설명할 수 있고 밑에 사진과 같이 API는 시스템 콜을 포함하는 더 큰 개념이다. 

 

참고 : 모두를 위한 리눅스 프로그래밍 / 아오키 미네로 / 제이펍 출판사

반응형

+ Recent posts