모든 프로세스에는 파일 설명자 테이블 (FDT)이 있으며 각 파일에는 파일 설명자가 있습니다. stdin, stdout 및 stderr에 대한 파일 설명자는 0, 1 및 2입니다.이 값은 모든 프로세스에서 동일합니다. 내가 믿는 FDT는 해당 파일의 INODE 항목에 대한 참조를 포함합니다. 파일 기술자는 프로세스간에 재사용됩니다. 즉, 전역 적으로 고유하지 않습니다. 각 프로세스의 FDT가 참조하는 커널에 의해 유지 관리되는 전역 FDT가 있습니까? stdin, stdout 및 stderr에 대한 FDT는 무엇에 해당합니까? 이 특별한 파일들은 키보드, 디스플레이 등과 연결되어 있습니다. 기사, 서적 등에 대한 링크를 제공하십시오.유닉스의 파일 기술자에 대한 도움말
답변
좋은 출발점은 2001 년부터 "A small trail through the Linux kernel"이라는 기사입니다. 구현은 계속되었지만 a more recent kernel에서 가장 잘 공부합니다.
커널 내에서 열려있는 파일 설명 자 각각은 열린 파일 또는 장치에 대한 모든 정보가 들어있는 에 해당합니다. 파일 설명자는 실제로 프로세스의 FDT에 대한 인덱스 이상입니다. 리눅스 커널에서 struct file
은 fd_install()
함수에 의해 FDT에 연결됩니다. struct file
은 dup2
system call으로 다른 파일 설명자에 재 할당 할 수 있습니다.
프로세스가 CLONE_FILES
플래그를 사용하여 clone
시스템 호출에 의해 생성되었지만 전역 FDT가없는 경우 프로세스는 동일한 FDT를 공유 할 수 있습니다. 정상적인 fork
작업은 상위 FDT의 복사본 인 새 FDT를 만듭니다. 이를 실제로 사용하려면 멀티 스레드 응용 프로그램의 각 스레드가 공통 FDT를 공유하는 복제 된 프로세스가되어야하며 모든 스레드가 동일한 정수 파일 설명자를 사용할 수 있어야합니다. fork
/exec
을 사용하여 새 프로세스를 만들면 새 프로세스가 동일한 파일 설명자로 시작되지만 부모 프로세스에 영향을주지 않고 파일을 열고 닫을 수 있습니다.
stdin, stdout, stderr에 대한 FDT 항목은 상위 항목으로부터 상속됩니다. 이 세 가지 FDT 항목에 대한 커널 구현에는 특별한 것이 없습니다. 그 의미는 C 라이브러리의 일반적인 사용에 기인합니다. 상위 프로세스 만이 연결 대상을 결정합니다. 캐릭터 장치에 연결하거나 파일이나 파이프에 연결되었을 수 있습니다. 캐릭터 디바이스의 경우 가장 일반적인 것은 tty 또는 pty 디바이스입니다. 무료 도서 Linux Device Drivers은 a good overview입니다.
- 1. 유닉스의 server1에서 server2까지의 ftp 파일
- 2. 안전한 파일 전송에 대한 도움말
- 3. 파일 형식 연결에 대한 도움말!
- 4. icics 파일 생성에 대한 도움말
- 5. 유닉스의 diff 옵션
- 6. 유닉스의 파이썬 아날로그 '
- 7. Java/J2EE에서 파일 업로드에 대한 도움말
- 8. 기존 자바 스크립트 파일 편집에 대한 도움말
- 9. AppleScript cURL 파일 업로드에 대한 도움말
- 10. 로그 파일 (ANTLR3) 구문 분석에 대한 도움말
- 11. iPhone 도움말 파일 생성
- 12. 유닉스의 여러 파일에 스크립트를 실행하십시오.
- 13. 도움말 파일 작성
- 14. opennetcf.net.mail 첨부 파일 도움말
- 15. foreach 루프에 대한 도움말
- 16. SOAP 파일 만들기 도움말
- 17. asp.net의 파일 다운로드 도움말
- 18. plist 파일 도움말
- 19. 도움말 텍스트 파일
- 20. codeiginter로 파일 업로드 도움말
- 21. PHP 파일 업로드 도움말
- 22. WPF의 도움말 파일
- 23. 파일 업로드 도움말 1.2
- 24. Axis2 배포 예외에 대한 도움말
- 25. 기본 .htaccess에 대한 도움말 mod_rewrite
- 26. C# 메모장 프로젝트에 대한 도움말
- 27. BST 삽입 기능에 대한 도움말
- 28. 세션 설정에 대한 도움말
- 29. 더블 버퍼링에 대한 도움말
- 30. lxml 파싱에 대한 도움말
3 단락의 끝에서, 하위 프로세스가 부모에게 영향을 미치지 않고 파일을 열고 닫을 수 있다는 것을 의미한다고 생각합니다. –