Автор Гілка: Як безпосередньо звертатись до диску?  (Прочитано 3021 раз)

Відсутній freevoluntary

  • Новачок
  • *
  • дописів: 1
  • Карма: +0/-0
  • I Love YaBB 2!
У Turbo-C це легко - підключив модуль bios.h і звертайся собі до функції biosdisk, з допомогою якої можна здійснювати низькорівневі операції з диском, а як це робиться у Linux? Ну, звісно, звертатись треба лише з режиму root, адже інакше система до диску не пустить. Підкажіть, чи можливо у редакторі Might Commander нашкрябати текст проги і потім його скомпілювати за допомогою gcc а тоді запустити на виконання, аби використовуючи лише наявні у Linux стандартні засоби розробки, стандартні модулі звертатись до диску через функції BIOS? Мені це до зарізу зараз потрібно... Будь-ласка, підкажіть, який модуль треба для цього підключати. Попередньо красно дякую! Пишіть відповіді мені на freevoluntary собака email.ua.

Відсутній Yaroslav Fedevych

  • Літератор
  • ******
  • дописів: 1069
  • Карма: +0/-0
  • Людина — ніщо, справа — все
1. Відповіді прийнято писати сюди й вони будуть писатися сюди, бо коли вони варті того, то повинні бути доступними всім.
2. Linux -- це не DOS. Припиняйте вирізати гланди через одне місце.

k_ilya

  • Гість
так важко глянути сирці parted чи fdisk?

Відсутній Loof

  • Дописувач
  • **
  • дописів: 77
  • Карма: +0/-0
  • Що новенького?
диск у Linux - це файл /dev/hdX, sdX....
Отже, можна звертатись до диску як до звичайного файлу  ;)

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
угу.
su
dd if=/dev/zero of=image bs=1024 count=1024
mkfs -t e2fs image
mount -t e2fs -o loop ./image /mnt
запиши до mnt щось тоді відмонтуй
umount /mnt
hd image|less
цікаво, правда?
Метод запису до /dev/hdX || /dev/sdX підходить, якщо знаєш шо таке файлова система.
На мою думку це погана ідея.
debian

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
  
Як безпосередньо звертатись до диску?..
А навіщо?
int fseek(FILE *stream, long offset, int whence);
       long ftell(FILE *stream);
       void rewind(FILE *stream);
       int fgetpos(FILE *stream, fpos_t *pos);
       int fsetpos(FILE *stream, fpos_t *pos);      
По моєму з такими гарними функціями і не потрібно безпосередньо до диску звертатись: мені перших двох з головою вистачає, щоб по базі данних лазити без проблем. Чи може хочеться полазити по файлу, трхи змінити і не перезаписувати його по 100 разів? - можна спробувати fp=fopen("filename","rwb"); повинно допомогти - сам не пробував ;)
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Scriptor

  • Новачок
  • *
  • дописів: 19
  • Карма: +0/-0
А якщо конче треба звертатися саме до низького рівня - лише порти:
$ man 2 iopl
і далі asm.

Код фунцій БІОС - реального режиму і реальних адрес, тому  викликати їх цивілізованими методами неможливо.
З повагою,
Scriptor