우분투에서 내 하드웨어에 대한 정보를 표시하기 위해 C를 작성했습니다. 이제 OS 업데이트를 위해 파일 대신 하드웨어를 직접 쿼리하는 등 좀 더 유연하게 만드는 방법이 궁금합니다. 그래서 나는 작성된 내용을 보고 /proc/scsi/scsi
동일한 작업을 수행하여 코드가 /proc/scsi/scsi 이외의 다른 것을 사용할 수 있는 unice에서도 실행되어 하드웨어 정보를 표시하는 방법을 배울 수 있다고 생각했습니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch, file_name[25] = "/proc/scsi/scsi";
FILE *fp;
fp = fopen(file_name,"r"); // read mode
if( fp == NULL )
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
printf("The contents of %s file are :\n", file_name);
while( ( ch = fgetc(fp) ) != EOF )
printf("%c",ch);
fclose(fp);
return 0;
}
나에게 그것은 다음과 같습니다
$ cc driveinfo.c;./a.out
The contents of /proc/scsi/scsi file are :
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: WDC WD2500JS-75N Rev: 10.0
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: ST3250824AS Rev: 3.AD
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: TSSTcorp Model: DVD+-RW TS-H653A Rev: D300
Type: CD-ROM ANSI SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Vendor: Optiarc Model: DVD-ROM DDU1681S Rev: 102A
Type: CD-ROM ANSI SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
Vendor: Lexar Model: USB Flash Drive Rev: 1100
Type: Direct-Access ANSI SCSI revision: 00
Host: scsi5 Channel: 00 Id: 00 Lun: 00
Vendor: WD Model: 5000AAKB Externa Rev: l108
Type: Direct-Access ANSI SCSI revision: 00
다른 유니스(예: bsd)에서도 작동합니까? ms-windows에서 어떻게 실행하나요? 파일 대신 하드웨어를 직접 쿼리할 수 있나요 /proc/scsi/scsi
?
답변1
파일 시스템은 /proc
실제가 아니며 파일처럼 보이도록 내보낸 커널 내부 데이터의 보기입니다. 이는 Linux와 Solaris(아이디어는 거기에서 뻔뻔하게 도용됨) 및 아마도 다른 Unixy 시스템에 존재합니다. 형식은 시스템에 따라 크게 달라집니다(Linux 커널 버전 간에도 크게 변경될 수도 있습니다).
실제로 하드웨어 데이터를 찾을 수 있는 중간 정도의 이식 가능한 방법은 없습니다(일부 Unices 및 이와 유사한 것들은 정말 이상한 철에서 실행될 수도 없습니다).
답변2
/proc 파일 시스템은 Linux 중심이므로 대답은 '아니오'입니다. BSD 시스템은 sysctl을 사용하여 이 정보를 얻습니다. 제 생각에는 Windows의 경우 이 그룹이 질문하기에 가장 좋은 그룹은 아닙니다. :)