Linux의 특수 파일 개념을 이해하려고합니다. 그러나 특수 파일 /dev
을 C에있는 몇 줄로 구현할 수있을 때 어리석은 것처럼 보입니다.
또한 null
로 리디렉션하는 대신 파이핑하는 것과 거의 같은 방식으로 사용할 수 있습니다 /dev/null
. 파일로 사용하는 특별한 이유가 있습니까? 파일을 파일로 만들지 않으면 같은 파일에 너무 많은 프로그램에 액세스하는 등 다른 많은 문제가 발생합니까?
grep blablubb file.txt 2>/dev/null && dosomething
프로그램 또는 함수 인 null과 함께 작동 할 수 없습니다.
read
함수 의 본문은 /dev/null
"return 0"으로 구성됩니다 (이것은 아무것도하지 않으며 EOF가 발생 함을 의미합니다). (정적 github.com/torvalds/linux/blob/master/ drivers / char / mem.c ) ssize_t read_null(struct file *file, char __user *buf, size_t count, loff_t *ppos) { return 0; }
(아, @JdeBP가 이미 그 점을 지적했음을 알 수 있습니다. 어쨌든, 여기에 그림이 있습니다 :-).
cat foo | bar
보다 (규모) 훨씬 더 나쁘다bar <foo
.cat
사소한 프로그램이지만 사소한 프로그램조차도 비용을 발생시킵니다 (일부 FIFO 시맨틱에 특정)-프로그램이seek()
FIFO 내부에 있을 수 없으므로 , 예를 들어 탐색으로 효율적으로 구현할 수있는 프로그램은 훨씬 더 비싼 작업을 수행 할 수 있기 때문에 파이프 라인이 주어 졌을 때, 캐릭터 디바이스를 사용/dev/null
하면 그러한 조작을 위조하거나 실제 파일을 사용하여이를 구현할 수 있지만 FIFO는 컨텍스트 인식을 처리 할 수 없습니다).