Linux

哪個程序更新 /proc/scsi/scsi?

  • March 6, 2013

我寫了 C 來顯示關於我在 ubuntu 上的硬體資訊。現在我想知道如何使它更靈活,例如直接查詢硬體而不是作業系統更新的文件。所以我認為我可以查看寫入的內容/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

它可以在其他 unices 例如 bsd 上執行嗎?如何讓它在 ms-windows 上執行?我可以直接查詢硬體而不是文件/proc/scsi/scsi嗎?

/proc文件系統不是真實的,它是核心內部數據的視圖,導出為看起來像文件。它存在於 Linux 和 Solaris(從那裡無恥地竊取了這個想法),也許還有其他 Unixy 系統。該格式非常依賴於系統(甚至在 Linux 核心版本之間發生了很大變化)。

確實沒有任何半便攜的方式來查找硬體數據(而且不可能,一些 Unices 和相似的東西在非常奇怪的鐵上執行)。

/proc 文件系統是以 Linux 為中心的,所以答案是否定的。BSD 系統使用 sysctl 來獲取此類資訊。至於 Windows,我認為這不是最好的問題。:)

引用自:https://unix.stackexchange.com/questions/67040