[ 파일 권한 ]
리눅스는 모든 자원( 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
'2CHAECHAE 학교생활 > OSNW실습' 카테고리의 다른 글
[ OS/NW 실습 ] 7주차 - TCP 소켓 프로그래밍 (0) | 2022.10.30 |
---|---|
[ OS/NW 실습 ] 7주차 - 바이트 순서( Byte Order ), 인터넷 주소와 도메인 (0) | 2022.10.29 |
[ OS/NW 실습 ] 6주차 - 소켓 네트워크 프로그램 개발 ② 서버 프로그램 만들기, 리눅스 클라이언트와 서버 코드 분석하기 (0) | 2022.10.29 |
[ OS/NW 실습 ] 6주차 - 소켓 네트워크 프로그램 개발 ① 네트워크 프로그램의 흐름, 클라이언트 프로그램 만들기 (0) | 2022.10.28 |
[ OS/NW 실습 ] 5주차 - 네트워크 OSI 모델 7 계층 구조 (0) | 2022.10.08 |