{{위키데이터 속성 추적}}
'''장치 파일'''(device file) 또는 '''특수 파일'''(special file)은 [[유닉스 계열]] [[운영 체제]]에서 마치 흔한 [[컴퓨터 파일|파일]]처럼 보이는 [[파일 시스템]] 안에 보이는 [[장치 드라이버]]의 [[인터페이스 (컴퓨팅)|인터페이스]]이다. 소프트웨어가 표준 [[출력|입출력 시스템 호출]]을 사용하여 장치 드라이버와 상호 작용할 수 있게 해 준다.

장치 파일들은 프린터와 같은 주변 기기를 위한 단순한 인터페이스를 제공하기도 한다. 그러나 [[디스크 파티션]]과 같이 그러한 장치들의 리소스에 접근하는 데에만 사용될 수 있다. 장치 파일은 [[시스템 리소스]]에 접근할 때에도 유용하다.

== 유닉스 특수 파일 ==
[[파일:Simplified Structure of the Linux Kernel.svg|섬네일|리눅스 커널을 단순화한 구조. 파일 시스템은 입출력 하위 시스템의 일부로 구현되어 있다.]]
[[유닉스 계열]] 운영 체제에서 두 가지 종류의 일반적인 장치 노드가 존재한다. 바로 문자 특수 파일(character special file)과 블록 특수 파일(block special file)이다. 이 둘의 다른 점은 운영 체제와 하드웨어가 처리하는 데이터 읽기/쓰기 방식이다. 이 두 노드 모두 장치 특수 파일(device special file)이라 불린다.

=== 문자 장치 ===
문자 특수 장치(character special file) 또는 문자 장치(character device)는 버퍼링되지 않은, 직접 접근을 하드웨어 장치에 제공한다.

=== 블록 장치 ===
블록 특수 파일(block special file) 또는 블록 장치(block device)는 버퍼링된 접근을 하드웨어 장치에 제공하며, 이들의 세부 사항에 따라 어느 정도의 추상화를 제공한다.<ref>{{웹 인용|제목=IEEE Std 1003.1, 2013 Edition|url=http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_79|accessdate=24 April 2014}}</ref>

=== 의사 장치 ===
* [[/dev/null]]
* [[/dev/zero]]
* [[/dev/full]]
* [[/dev/random]], [[/dev/urandom]]

=== 노드 생성 ===
노드들은 mknod라는 [[시스템 호출]]을 통해 만들어진다. 노드를 만드는 명령 줄 프로그램 또한 mknod이다. 노드들은 일반적인 파일 시스템의 시스템 호출([[rename]], [[unlink]])과 명령어([[mv]], [[rm (유닉스)|rm]])을 통해 이동하거나 삭제할 수 있다.

일부 유닉스 버전들은 makedev나 MAKEDEV라는 스크립트를 포함하고 있으며, 디렉터리 /dev에 있는 필요한 모든 장치를 만들어준다.

== 명명 규칙 ==
다음의 두문자들은 장치 종류의 식별을 위하여 <code>/dev</code> 계층의 일부 장치 이름에 사용할 수 있다.:

* <code>lp</code>: [[라인 프린터]] ([[시스템 V 인쇄 시스템|lp]] 비교)
* <code>pt</code>: [[의사 단말]] (가상 터미널)
* <code>tty</code>: [[컴퓨터 터미널|터미널]]

리눅스 기반 운영 체제에서 일반적으로 쓰이는 두문자들이 더 존재한다:

* <code>fb</code>: [[프레임 버퍼]]
* <code>fd</code>: (플랫폼) [[플로피 디스크]].
* <code>hd</code>: (클래식) [[IDE]] 드라이버. (이전에는 ATA [[하드 디스크 드라이브]], ATAPI [[광 디스크 드라이브]] 등에 사용됨)
** <code>hda</code>: 첫 [[ATA 채널]]의 마스터 장치.
** <code>hdb</code>: 첫 ATA 채널의 슬레이브 장치.
** <code>hdc</code>: 2차 ATA 채널의 마스터 장치.
*** <code>hdc1</code>: 이 디스크의 첫 파티션 (예)
*** <code>hdc5</code>: 확장 파티션의 첫 [[확장 부트 레코드|논리 드라이브]] (예)
** <code>hdd</code>: 2차 ATA 채널의 슬레이드 장치
* <code>parport</code>, <code>pp</code>: [[병렬 포트]]
* [[SCSI]] 드라이버 ([[libATA]], 즉 현대의 [[병렬 ATA|PATA]]/[[직렬 ATA|SATA]] 드라이버에도 사용), [[USB]], [[IEEE 1394]] 등.
** <code>sd</code>: 대용량 스토리지 드라이버
*** <code>sda</code>: 1차 등록 장치
**** <code>sda4</code>: 디스크의 마지막 파티션 (예)
**** <code>sda6</code>: 확장 파티션의 2차 [[확장 부트 레코드|논리 드라이브]] (예)
*** <code>sdb, sdc</code> 등: 2차, 3차 등록 장치
** <code>ses</code>: 인클로저 드라이버
** <code>sg</code>: 일반 SCSI 계층
** <code>sr</code>: 롬 드라이버 (데이터 지향 광 디스크 드라이브. scd는 2차 별칭임.)
** <code>st</code>: [[자기 테이프]] 드라이버
* <code>tty</code>: [[컴퓨터 터미널|터미널]]
** <code>ttyS</code>: (플랫폼) [[직렬 포트]] 드라이버
** <code>ttyUSB</code>: USB 직렬 변환기, 모뎀 등.

=== devfs ===
devfs는 장치 파일 시스템이나 유닉스 계열 운영 체제의 특정한 구현체이며, 장치 파일들을 대표하는데 사용된다. 기반이 되는 구현 구조는 운영 체제에 따라 다양하다.

물리적으로 구현된 파일 시스템(예: 하드 드라이브)에서 이러한 특수 파일들을 관리하는 것은 편리성이 떨어지며, 여하튼 커널의 보조를 받아야 하기 때문에 물리적으로 저장되지 않는 특수 목적의 논리 파일 시스템이라는 개념이 등장하였다.

== MS-DOS 장치 파일 ==
몇 가지 장치 파일은 아래에 나열되어 있다:
{| class="wikitable" cellpadding=4
!파일 이름
!목적
|- 
| <code>CON</code>
| [[컴퓨터 콘솔|콘솔]] 장치
|- 
| <code>PRN</code>
| [[프린터]]
|-
| <code>AUX</code>
| 보조 장치
|-
| <code>COM0 COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9</code>
| [[직렬 포트]]
|-
| <code>LPT1 LPT2 PRN</code>
| [[병렬 포트]]
|- 
| <code>NUL</code>
| [[비트 버킷]] (아무것도 표시하지 않음을 말하기도 함)
|}

== 같이 보기 ==
* [[Sysfs]]
* [[블록 (컴퓨팅)]]
* [[비동기 입출력]]
* [[버퍼 (컴퓨터 과학)]]
* [[파일 시스템]]
* [[하드웨어 추상화]]
* [[스토리지 에어리어 네트워크]]
* [[사용자 공간]]
* [[Udev]]
== 각주 ==
{{각주}}

{{파일 시스템}}
{{토막글|컴퓨터 과학}}

[[분류:장치 파일| ]]
[[분류:리눅스 커널 인터페이스]]