Linux 세계에서는 사용자 공간 프로그램이 모든 하드웨어 장치와 통신하기 위해 해당 파일이 있다는 것을 배웠습니다. 예를 들어 장치에 대한 파일은 다음과 같습니다.
하드 디스크:
/dev/sd*
CD 및 DVD 드라이브:
/dev/sr*
PATA 하드 드라이브:
/dev/hd*
터미널 :
/dev/tt*
및/dev/pts/*
/dev/tty
직렬 포트:
/dev/ttyS*
병렬 포트:
/dev/lp0
및/dev/lp1
오디오 장비
/dev/snd/*
:/dev/dsp/
등dev/audio
내 이해는,
Windows와 달리 Linux 세계에서는 파일 시스템이 파일 저장 외에 IO 통신에도 사용됩니다.
그래서,장치 드라이버해당 하드웨어 장치의 경우 해당 파일의 데이터가 실제로 채워지며(예: /dev/sd*
) 이는 실제로 장치에서 전송/수신된 데이터입니다. 이를 통해 사용자 공간 프로그램은 이러한 파일을 사용하여 장치에서 읽고 쓸 수 있습니다. 예를 들어 다음은 C를 이용한 사용자 공간 프로그램이다.
int fd;
struct termios *oldser,*newser,*oldter,*newter;
oldser=(struct termios *)malloc(sizeof(struct termios));
newser=(struct termios *)malloc(sizeof(struct termios));
oldter=(struct termios *)malloc(sizeof(struct termios));
newter=(struct termios *)malloc(sizeof(struct termios));
fd=openSerial("/dev/ttyS1");
setSerial(fd,oldser,newser);
/* next stop echo and buffering for stdin */
tcgetattr(0,oldter);
tcgetattr(0,newter); /* get working stdtio */
질문:
네가 말할 때,모든 것은 파일 또는 프로세스입니다.,
이것은 Linux 커널(또는 UNIX)에서 IO를 수행하기 위해 파일을 사용하는 것에 대한 위에서의 이해를 의미합니까? 제 말을 정정해주세요.
답변1
Linux 세계에서는 사용자 공간 프로그램이 모든 하드웨어 장치와 실제로 통신하려면 해당 파일과 통신해야 한다는 것을 이해합니다.
이것은 Unix 패러다임이지만 Linux에서 항상 맞는 것은 아닙니다. (비록 제가 원시 Unix에 익숙하지는 않지만 Linux에서도 그럴 것이라고 생각합니다.)
Windows와 달리 Linux 세계에서는 파일 시스템이 파일 저장 외에 IO 통신에도 사용됩니다.
설마. 예를 들어 익명 파이프에는 파일 시스템이 없으며 명명된 파이프를 사용하더라도 데이터 자체는 파일 시스템을 통과하지 않습니다.
따라서 해당 하드웨어 장치의 장치 드라이버는 실제로 해당 파일(예: /dev/sd*)에 데이터를 채웁니다.
하지만 사실은 그렇지 않아요충전재파일의 경우 특수 파일의 읽기/쓰기/ioctl만 처리합니다. 파일 시스템에서는 이러한 작업을 볼 수 없습니다.
모든 것이 파일이거나 프로세스라고 할 때, 이것이 Linux 커널(또는 UNIX)에서 파일을 사용하여 IO를 수행하는 방식입니까?
일종의. 패러다임은 디스크에서 읽고 쓰는 별도의 기능을 갖는 대신 파일을 처리할 수 있는 프로그램에 디스크를 전달할 수 있도록 파일 인터페이스를 구현해야 한다는 것입니다. 예를 들어, 디스크 처리에 특정한 코드가 없더라도 hexdump
디스크의 내용에 액세스할 수 있습니다.hexdump