본문 바로가기
2CHAECHAE 학교생활/OSNW실습

[ OS/NW 실습 ] 6주차 - 소켓 네트워크 프로그램 이해

by 2CHAE._.EUN 2022. 10. 29.

[ 파일 권한 ]

 

리눅스는 모든 자원( file, directory, device, socket )을 파일로 본다. 

파일을 가리키는 지정 번호( file descriptor )로 소켓을 비롯한 파일을 제어한다. 

 

리눅스는 여러 클라이언트들이 동시에 접속해서 사용하는 OS이다. 그러므로 각 파일을 사용할 수 있는

권한( permission )이 필요하다.

유저 : 소유자( 파일을 만든 사람 ), 그룹 ( 소유자와 친한 사람 ), 기타

권한 : r( read ), w( write ), x( execute )

 

유저, 그룹, 기타에 해당하는 권한이 각각 존재한다.

파일의 최대 권한은 666이고, 디렉토리의 최대 권한은 777이다.

 

* 754와 0754의 차이 : 0을 붙이면 754가 8진수임을 의미한다.

 

chmod : 권한을 변경할 수 있는 명령어

chmod 0666 echo_client.c
/* 소스코드에 대해 모든 유저는 read와 write만 가능하다. execute는 불가능하다. */

chmod 0444 echo_server.c
/* 소스코드에 대해 모든 유저는 read만 가능하다. write와 execute는 불가능하다. */

 

* 파일의 종류 모두 파일이지만 파일의 형식을 다르게 해서 입출력 방식을 다르게 한다.

- : 일반 파일

d : 디렉토리

l : 심볼릭 링크파일

c : 문자 장치 → 연속된 데이터의 흐름을 다루는 장치

b : 블록 장치 → 블록 단위로 데이터에 접근하는 장치 ex) HDD, CD-ROM

p : 파이프

s : 소켓

 


[ 표준 입력, 표준 출력, 표준 에러 ]

 

리눅스는 기본적인 입출력을 위한 장치를 가진다. 장치를 위한 파일 지정 번호는 프로세스 생성과 함께 할당이 된다.

즉, 프로세스가 만들어지면 기본적으로 3개의 파일이 open이 된다. ( open 함수는 필요 없다. )

 

입력 장치 번호 설명
표준 입력 0 키보드 입력
표준 출력 1 모니터 출력
표준 에러 2 모니터 출력

 

1번은 표준 출력으로 정상적인 화면 출력이고, 2번은 표준 에러로 에러가 발생할 때 출력이 된다.

 


[ 재지향( redirection ) ]

 

재지향( redirection ) : 리눅스는 장치로 출력된 데이터를 다른 장치로 전송할 수 있다.

→ 파일 데이터를 프린터로 보내거나 혹은 모니터로 전송한다. + 모니터에 출력된 내용을 파일로 전송한다.

 

ex) 표준 출력 데이터를 txt 파일로 리다이렉션 한다.

cat ./echo_client.c > ok.txt

 

< : 원래 키보드에서 입력받아야 하는 것이 원칙이지만 <를 사용할 경우, 앞에 있는 파일로부터 받아온다는 의미

 

ex) cat ./echo_client.c > ok.txt < input.txt

 


[ 파일 관련 함수 ]

 

시스템콜( system call ) : 운영체제가 제공하는 서비스를 호출해주는 함수이다.

ex) open(), read(), write()

 

사용자 함수( user function ) : 사용자가 자주 사용하는 기능들을 묶어서 쉽게 사용할 수 있도록 제공하는 함수

ex) open

 

fd = open("my.txt", O_WRONLY|O_CREAT, 0755);

 

pathname : 열고자 하는 파일의 이름

flag : 파일 제어 방법 지정

① O_RDONLY : 읽기 전용

② O_WRONLY : 쓰기 전용

③ O_CREATE : 파일을 생성

mode : 파일의 권한, 생성 방식 지정

 


[ 송신 버퍼와 수신 버퍼 ]

 

 

1. read()는 수신 버퍼로 부터 읽어온다. 

2. 운영체제 커널내의 있는 버퍼로 부터 read와 write를 수행한다.

3. 버퍼에 아무런 데이터가 존재하지 않는다면 read()할 데이터가 존재하지 않는다.

4. 버퍼 2개를 사용하는 것이 가장 기본이다.

 


[ 파일 닫기 ]

 

더이상 사용하지 않는 파일은 닫아야한다. close 함수를 호출하지 않는다면 파일은 열려 있는 채로 남게 되어 

자원이 낭비된다.

 

close(int fd);

 

프로세스는 열 수 있는 파일 개수의 한계가 존재하고, 파일을 닫지 않는다면 한계를 초과하게 되어 더이상 파일을

열 수 없는 문제가 생긴다.

 

리눅스는 하나의 프로세스 당 1024개의 파일 및 소켓을 생성할 수 있다. 생성하고 싶은 파일 및 소켓의 개수를 늘리고

싶을 경우에는 ulimit 명령어를 사용해서 생성 가능한 파일의 개수를 늘릴 수 있다.

( 소형 모델의 경우만 가능하고 실제 회사의 큰 서버에서는 사용할 수 없다. )

 

ulimit -n 4096