유닉스에서 읽고 쓸 수있는 대부분의 객체 (일반 파일, 파이프, 터미널, 원시 디스크 드라이브)는 모두 파일과 유사하게 만들어집니다.
다음과 같은 프로그램 cat
은 표준 입력에서 읽습니다.
n = read(0, buffer, 512);
512 바이트를 요청합니다. n
실제로 읽은 바이트 수이거나 오류가있는 경우 -1입니다.
일반 파일을 사용하여이 작업을 반복적으로 수행하면 512 바이트의 읽기가 발생하고 파일의 끝에서 읽기가 다소 짧아지고 파일의 끝을지나 읽으려고하면 0이됩니다. 따라서 <= 0이 cat
될 때까지 실행됩니다 n
.
터미널에서 읽는 것은 약간 다릅니다. Enter키로 끝나는 줄을 입력하면 read
해당 줄만 반환합니다.
입력 할 수있는 특수 문자가 몇 가지 있습니다. 하나는 Ctrl-D입니다. 이것을 입력하면 운영 체제는 입력 한 모든 현재 행 ( Ctrl-D자체가 아닌 )을 읽기를 수행하는 프로그램으로 보냅니다 . 그리고 다음은 고요한 일입니다. Ctrl-D줄의 첫 번째 문자 인 경우 프로그램은 일반 파일의 끝 부분에 도달했는지 확인하는 것처럼 길이가 0 인 행을 전송합니다. 일반 파일에서 읽든 터미널에서 읽든 상관없이 cat
다르게 할 필요는 없습니다 .
또 다른 특수 문자는 Ctrl-Z입니다. 라인의 어느 곳에서나 입력하면, 운영 체제는 그 시점까지 입력 한 모든 것을 버리고 SIGTSTP 신호를 프로그램에 전송합니다.이 신호는 보통 프로그램을 중지 (일시 정지)하고 제어를 쉘로 리턴합니다.
예를 들어
$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+ Stopped cat > file.txt
버린 일부 문자를 입력 한 후 cat
출력 파일에 아무것도 쓰지 않고 중지되었습니다.
$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+ Stopped cat > file.txt
한 줄을 입력 cat
하여 출력 파일 을 읽고 쓴 다음 Ctrl-Z중지되었습니다 cat
.