Запись температуры ЦП на карту отладки BIOS порта 0x80 с помощью сценария Bash

Хотя у меня нет под рукой системы MINIX, я уверен, что проблема в том, что "режим" не имеет отдельных битов для различных типов файлов. Вам следует использовать макросы типа S_ISDIR, а не сравнивать с S_IFDIR (S, а не F). Вот библиотека GNU C.

Вот старые версии с машины linux. Ведущие 0 означают, что эти значения в восьмеричном исчислении.

  #define S_ISDIR(m)    (((m) & S_IFMT) == S_IFDIR)

  #define S_IFMT  00170000
  #define S_IFSOCK 0140000
  #define S_IFLNK  0120000
  #define S_IFREG  0100000
  #define S_IFBLK  0060000
  #define S_IFDIR  0040000
  #define S_IFCHR  0020000

и т.д. Итак, ваш код проверяет, является ли (mode & 0120000) ненулевым, и это будет так, если установлен либо 0100000, либо 020000 бит, что будет так для S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK и S_IFCHR. Ваш pts будет иметь тип S_IFCHR.

2
05.07.2018, 00:21
1 ответ

Вы хотите преобразовать температуру, считанную как десятичное значение, в символ, соответствующий шестнадцатеричному значению, которое при отображении читается так же, как температура...

Запрос кажется более сложным, чем он есть на самом деле; printfможно использовать для печати символа, соответствующего заданному коду символа:

$ printf "\x64\n"
d

Таким образом, вы получите нужный результат с помощью

printf "\x$(cut -c1-2 < /sys/class/hwmon/hwmon0/temp2_input)" | dd of=/dev/port bs=1 count=1 seek=128
2
27.01.2020, 22:09

Теги

Похожие вопросы