카테고리 없음
[컴퓨터시스템] 10장 I/O 입출력
하루설렘
2021. 12. 22. 21:08
I/O Overview
- Linux환경에서 모든 device들은 file로 취급한다. (우리가 열고 닫고, 읽고, 쓰는 file)
- /dev/sda2 (/usr disk partition)
- /dev/tty2 (terminal)
- 심지어 커널 (kernel) 조차 파일로서 취급
- /boot/vmlinuz-3.13.0-55-generic (kernel image)
- /proc (kernel data structures)
※ simple interface
- open() and close()
- read() and write()
- lseek() : indicates next offset into file to read or write
File Types
- Regular files : (text files/Binary files)
- Directory
- Socket
File의 끝은 => EOL (End Of Line)
- linux and max os : '\n'
- window and internet protocols '\r\n'
Directory (Link array로 구성)
- .(dot) : 현재 디렉토리
- ..(dot dot) : 부모 디렉토리
- mkdir(빈 디렉토리 만들기)/ ls(현 디렉토리 내용확인)/ rmdir(빈 디렉토리 삭제)
File Descriptor (파일 식별자)
file descriptor란, 실제로 파일을 열 때 부여하는 번호를 의미한다. (학번, 주민번호같은 느낌)
Linux shell에서 만들어진 각 프로세스는 터미널과 관련된 세 가지 파일을 연다.
- 0 : stdin (standard input) ; 키보드에서 타이핑하면 0번 파일에 쓰여진다.
- 1 : stdout (standard output) ; 모니터로 연결되어있는 파일
- 2 : stderr (standard error) ; 모니터로 연결되어있고, 버퍼없이 바로 출력하는 특징
- open/close
- read : 현 file position에서 memory로 bytes를 복사하는 것
- Short counts가 간혹 발생할 수 있고 error는 아니다.
char buf[512];
int fd; /* file descriptor */
int nbytes; /* number of bytes read */
/* Open file fd ... */
/* Then read up to 512 bytes from file fd */
if ((nbytes = read(fd, buf, sizeof(buf))) < 0) {
perror("read");
exit(1);
}
- write : memory에서 현 file position으로 복사하는 것 (w/ changing current position)
- Shorts counts 역시 간혹 발생할 수 있고, error는 아니다.
char buf[512];
int fd; /* file descriptor */
int nbytes; /* number of bytes read */
/* Open the file fd ... */
/* Then write up to 512 bytes from buf to file fd */
if ((nbytes = write(fd, buf, sizeof(buf)) < 0) {
perror("write");
exit(1);
}