cat < file.txt
누가 파일을 읽을 책임이 있습니까?
쉘이 열린 파일을 읽고 파일을 읽은 다음 내용을 명령의 표준 입력에 기록합니까?
쉘 명령의 경우 cat <file.txt
:
<
는 file.txt
읽기를 위해 셸을 엽니 다 .cat
표준 입력이에 연결된 명령을 실행합니다 file.txt
.cat
명령은 표준 입력 (so file.txt
) 에서 읽고 내용을 표준 출력에 복사합니다.따라서 쉘은 파일을 여는 것이지만 cat
명령은 데이터를 읽는 것입니다.
쉘과 그 하위 프로세스가 수행하는 시스템 호출을 나열하여 진행 상황을 관찰 할 수 있습니다. Linux의 경우 :
$ strace -f sh -c 'cat <file.txt' >/dev/null
execve("/bin/sh", ["sh", "-c", "cat <file.txt"], [/* 76 vars */]) = 0
…
open("file.txt", O_RDONLY) = 3
…
dup2(3, 0) = 0
…
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbc737539d0) = 22703
[pid 22702] wait4(-1, <unfinished ...>
[pid 22703] execve("/bin/cat", ["cat"], [/* 76 vars */]) = 0
[pid 22703] read(0, "wibble"..., 32768) = 6
[pid 22703] write(1, "wibble"..., 6) = 6
[pid 22703] read(0, "", 32768) = 0
[pid 22703] close(0) = 0
[pid 22703] close(1) = 0
[pid 22703] close(2) = 0
[pid 22703] exit_group(0) = ?
<... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 22703
--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigreturn(0x11) = 22703
…
(22702는 부모 셸 프로세스, 22703은 자식 cat
)
쉘 명령 cat file.txt
은 다르게 작동합니다.
cat
명령을 실행하고 하나의 매개 변수, 즉 file.txt
.cat
프로그램이 열립니다 file.txt
읽기.cat
명령은 file.txt
내용을 읽고 표준 출력에 복사합니다.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다