I/O Kernel Service
: 커널에서만 System Call로 동작가능하다. (userspace에선 불가능)
파일
- UNIX 시스템에서는 파일, 디렉토리,장치까지 모든 것을 파일로 간주합니다.
- /dev/null: 항상 읽고 쓸수 있고, 데이터가 없고, 써져있는 것을 전부 없앤다.
- /dev/urandom: 항상 읽을 수 있고, 암호학적인 랜덤 데이터를 읽는다.
- A Linux file is a sequence of m bytes
- 심지어 kernel 마저도 file 이다.
- 파일 종류
- Regular file : 임의 데이터가 들어있다.
- Text files : only ASCII or Unicode characters - sequence of text lines
- binary files : 나머지
- 커널은 두개를 구분 못한다. application 에서나 구분함
- EOL(end of line)
- ‘\n’ ,LF, 0xa → Linux, mac, UNIX
- ‘\r\n’ (0xd 0xa) → Window, Internet
- Directory : array of links - maps a filename to a file
- 최소 두 가지 entry 를 가지고 있다.
- . → 스스로의 링크
- .. → 부모 directory로의 링크
- mkdir, ls, rmdir
- 계층구조 (hierarchy)
- kernal은 각 프로세스 마다 current working directory(cwd) 를 보유중
- Socket, Symbolic link, Character, Block devices
파일 디스크립터(File Descriptor)
: 프로세스에서 열려 있는 파일을 나타내는 값입니다.
- 표준 파일 디스크립터: 0 (stdin), 1 (stdout), 2 (stderr)와 같이 미리 정의된 파일 디스크립터
파일 모드 (File Modes)
- 파일 소유자와 그룹: 각 파일은 소유자와 그룹을 가지며, 이들에게 다른 권한을 부여할 수 있습니다.
- 파일 권한: 파일 모드 비트(rwx rwx rwx)를 사용하여 읽기(r), 쓰기(w), 실행(x) 권한을 설정합니다. 각각 사용자, 그룹, 기타 사용자에 대한 권한을 나타냅니다.
- Octal numbers range from 0-7 and are three bits long. 8진수로 표현
- 750 (111 101 000b): rwx r-x --- : 1이 사용가능 , 0이 불가능
- 파일 모드 표현: 파일 모드는 보통 8진수로 표현됩니다. 예를 들어, 750은 사용자에게 모든 권한을, 그룹에게 읽기 및 실행 권한을, 기타 사용자에게는 어떤 권한도 부여하지 않습니다.
UNIX I/O
-
POSIX 표준: 유닉스 I/O는 POSIX 표준에 정의되어 있습니다.
-
시스템 호출
- 파일 열기/닫기 (
open
, close
)
- 읽기/쓰기 (
read
, write
)
- 파일 위치 변경 (
lseek
) : current file position 변경
-
파일 디스크립터 사용: 파일 디스크립터를 사용하여 파일을 조작합니다.
-
원시 데이터 처리: 데이터 변환 없이 원시 바이트 단위로 데이터를 읽고 씁니다.
-
오류 처리: 시스템 호출 실패 시 음수 값을 반환하고, 글로벌 변수인 errno
에 오류 원인을 설정합니다.
- Include <errno.h> to define errno
- perror() and strerror() produce a human-readable error from errno.