proc 장치에 대한 정보를 업데이트하는 방법 [복제]

proc 장치에 대한 정보를 업데이트하는 방법 [복제]

cat /proc/asound/cards를 실행하면 proc이 이 정보를 얻는 모든 사운드 카드 세부 정보가 나열됩니다. 이 파일은 수동으로 입력하려는 경우 지속적으로 업데이트됩니다.

답변1

이는 /proc(및 /sys)이 커널 인터페이스이기 때문입니다. 디스크에 실제 파일이 없습니다. 이 정보는 운영 체제에서 직접 제공됩니다. 개별 파일은 소켓 인터페이스와 비슷합니다. 파일을 읽을 때 데이터를 요청하는 것입니다.

이것프로세스 파일 시스템분명히 UNIX 8에서 유래되었으며(Linux 구현은 대부분의 다른 구현과 마찬가지로 Bell Labs의 Plan 9에서 복제되었지만) "모든 것은 파일이다"라는 UNIX 모토를 따릅니다. 이는 주로 개별 실행 중인 프로세스(맨 위 숫자가 pid)를 나타내지만, 알다시피 여기에는 몇 가지 다른 항목도 포함될 수 있습니다. Linux에서는 하드웨어 지향적입니다 /sys.

프로그래밍 방식으로 proc 정보를 얻는 것보다 "더 나은 대안"을 찾는 사람들이 가끔 있습니다. 여기서 "더 나은 대안"은 sysctl()또는 와 같은 시스템 호출을 의미합니다 ioctl(). 이는 proc 또는 sys 파일을 읽는 것이 일반 파일을 읽는 것과 같은 일부 I/O 오버헤드를 포함한다는 오해에서 비롯된 것 같습니다. 일부 운영 체제(내 생각에는 FreeBSD)가 그 반대를 수행하고 Linux에서는 sysctl()호출이 가치가 떨어지지만 이는 사실이 아닙니다 .

~에서Man 2 시스템 제어:

이 시스템 호출의 사용은 오랫동안 권장되지 않았으며 너무 인기가 없어서 향후 커널 버전에서는 사라질 가능성이 높습니다. 프로그램에서 즉시 제거하십시오. 대신 /proc/sys 인터페이스를 사용하십시오.

최소한 Linux에서는 procfs가 공식적으로 권장되는 커널 정보 소스입니다. "더 나은 선택"은 없습니다.

답변2

파일은 /proc실제로 어디에도 저장되지 않습니다. 파일을 읽으려고 하면 커널은 해당 드라이버의 함수를 호출하여 파일 내용을 가져옵니다.

/proc/asound/cards의 경우snd_card_info_read, ALSA의 내부 사운드 카드 목록에서 출력을 생성합니다.

다른 사운드 드라이버를 인스턴스화하지 않고는 다른 항목을 추가할 수 없습니다.

관련 정보