Читать «Linux: Полное руководство» онлайн - страница 406

Денис Николаевич Колисниченко

 }

 dev_state->dev_open = 0;

 MOD_DEC_USE_COUNT;

 return 0;

}

Теперь модуль для абстрактного устройства device готов. Вы можете написать небольшую программку, которая пыталась бы выполнить операции с нашим устройством: открыть его и закрыть — других операций мы не определили. Для определения других действий используется та же структура file_operations. Листинг 28.10 показывает, как она объявлена в файле /usr/src/linux-2.4/include/linux/fs.h.

Листинг 28.10. Фрагмент файла /usr/src/linux-2.4/include/linux/fs.h

struct file_operations {

 struct module *owner;

 loff_t (*llseek)(struct file*, loff_t, int);

 ssize_t (*read)(struct file*, char*, size_t, loff_t*);

 ssize_t (*write)(struct file*, const char*,

  size_t, loff_t*);

 int (*readdir)(struct file*, void*, filldir_t);

 unsigned int (*poll) (struct file*,

  struct poll_table_struct*);

 int (*ioctl)(struct inode*, struct file*, unsigned int,

  unsigned long);

 int (*mmap)(struct file*, struct vm_area_struct*);

 int (*open)(struct inode*, struct file*);

 int (*flush)(struct file*);

 int (*release)(struct inode*, struct file*);

 int (*fsync)(struct file*, struct dentry*,

  int datasync);

 int (*fasync)(int, struct file*, int);

 int (*lock)(struct file*, int, struct file_lock*);

 ssize_t (*readv)(struct file*, const struct iovec*,

  unsigned long, loff_t*);

 ssize_t (*writev)(struct file*, const struct iovec*,

  unsigned long, loff_t*);

 ssize_t (*sendpage)(struct file*, struct page*, int, size_t,

  loff_t*, int);

 unsigned long (*get_unmapped_area)(struct file*, unsigned long,

  unsigned long, unsigned long, unsigned long);

};

Как использовать структуру file_operations, думаю, ясно. Например, нам нужно описать обработчики записи и чтения устройства — функции device_write() и device_read():

struct file_operations FO = {

 open: device_open,

 release: device_close,

 read: device_read,

 write: device_write

};

Обработчики чтения и записи пишутся «по образу и подобию» обработчиков открытия и закрытия устройства, то есть сначала нам нужно определить младший номер с помощью вызова MINOR(), а затем произвести операцию с устройством.

Приложение

Таблицы соответствия Windows- и Linux-программ

С помощью приведенных ниже таблиц вы сможете подобрать достойный аналог для вашей Windows-программы. При заполнении таблицы я руководствовался простым правилом: чтобы Windows-программа и ее Linux-аналог были в одной весовой категории, то есть обладали примерно одинаковыми возможностями.

Работа в Интернет

Windows-программа Linux-аналог Комментарий
Internet Explorer Netscape Navigator/Mozilla Думаю, что обе эти программы в представлении и особых комментариях не нуждаются — мы их знаем еще со времен Windows
Konqueror Вряд ли Завоеватель сможет выступить в роли Internet Explorer'а. Но для походов на не очень «навороченные» (с использованием Flash, VRML, апплеты Java) сайты его возможностей вполне хватит
Galeon Данный браузер основан на движке Mozilla, поэтому он с успехом может заменить самого Mozill'у!
IE for Linux Компания Microsoft портировала программу IE на платформу Linux. Честно говоря, «ослика ИА для Линукс» я в глаза не видел, но судя по отзывам, программа линуксоидам не понравилась
Opera Opera for Linux Уже вышла восьмая версия этого популярного браузера, и она доступна пользователям Linux. Но рекомендуется воспользоваться стабильной версией 7.54 — это проверенная временем, надежная версия
Mozilla for Windows Mozilla for Linux Linux-аналог обладает всеми возможностями Windows-программы
Outlook Ximian Evolution Полный аналог знаменитой программы Outlook — программы похожи друг на друга как две капли воды
K Mail K Mail вполне справится с возложенной на него задачей — служить заменителем для Outlook. Организация учетных записей K Mail очень напоминает Outlook, что делает эти две программы несколько похожими друг на друга. Конечно, K Mail и Outlook не очень похожи внешне, но идея остается прежней. Нужно заметить, что K Mail не заменит полную версию Outlook, скорее всего, он «потянет» на роль аналога Outlook Express
Outlook (чтение новостей) Knode Программа обладает достаточно удобным интерфейсам, что позволяет ставить ее в один ряд с клиентом новостей программы Outlook
Netscape Messenger Messenger — это более зрелый, по сравнению с Knode, продукт, позволяющий читать не только почту по протоколам POP3 и IMP3, но и новости
The Bat! Sylpheed Программа The Bat! давно стала культовой, а ее разработчики видно, не спешат портировать программу на платформу Linux. К счастью, мир не без добрых людей: разработчик Hiroyuki Yamamoto (скорее всего, японец) написал Linux-аналог программы The Bat! Программа Sylpheed заслуживает отдельного разговора, поэтому о ней мы поговорим немного позже
The Bat! K Mail Программа K Mail тоже может выступать в роли аналога для программы The Bat!, но с меньшим успехом, чем программа Sylpheed
FlashGet, Reget, Go!zilla (менеджеры закачки файлов) Downloader for X Мне очень понравилась эта программа — по своим возможностям она не уступает ни одной из перечисленных Windows-программ
Kget (или Caitoo) Довольно неплохой загрузчик файлов
Wget Данная программа работает в консоли, то есть не имеет графического интерфейса, но возможности данной программы заслуживают уважения
Teleport Pro (полная загрузка сайта) Downloader for X Программа Downloader for X может использоваться как для загрузки одного файла, так и для закачки целых сайтов
Wget То же самое можно сказать и о программе wget
FTP-клиенты (Bullet Proof FTP) 1. Gftp 2. Ifgp 3. ncftp Первые две программы более удобны, поскольку они являются графическими приложениями. Третья программа — ncftp — работает в консоли, но обладает довольно полезными функциями, например, докачка файла в случае разрыва соединения или закачка файлов по шаблону
ICQ, MSN, AIM 1. licq 2. aicq 3. micq 4. Gaim 5. Simple Instant messenger Существует много разновидностей ICQ-клиента. Вы можете выбрать один из них на свой вкус
Mirc (IRC-клиент) Xhat, Kvlrc, Ksirc С IRC-клиентами также никогда не было проблем — это только три наиболее удобные на мой взгляд IRC-клиенты
Firewall (BlackICE, ATGuard, ZoneAlarm) iptables или ipchains Обе эти программы являются стандартными и устанавливаются при установке любого дистрибутива Linux. Использовать графические оболочки для iptables или ipchains (Kmyfirewall, Firewall Builder) я не рекомендую, поскольку ни одна оболочка не позволяет гибко настроить firewall
VisualRoute, CyberKit Xtraceroute, VisualRout for Linux, traceroute, ping, tcpdump Программу VisualRoute с успехом можно заменить программой Xtraceroute или ее текстовой версией traceroute. Пакет CyberKit можно заменить набором стандартных программ — traceroute, ping, nslookup и tcpdump; полученная смесь будет мощнее, чем CyberKit
Фильтрация данных и роутинг (BlackICE, ATGuard, WinRoute, WinGate) Squid и route Обе эти программы являются стандартными и обладают значительно большими возможностями, чем их Windows-аналоги
VentaFax efax Gfax Эти программы смогут заменить знаменитую программу VentaFax
Vdialer, E-type dialer (дозвон к провайдеру) Kppp Gppp Kinternet Звонить к провайдеру Linux также умеет — не сомневайтесь, ведь Linux создан для сети, как птица для полета
Загрузка канала kpppload kisdnload Первая программа отображает график загрузки PPP-канала, а вторая — канала ISDN
Remote Administrator telnet ssh X-terminal В отличие от Windows, где для удаленного администрирования нужно устанавливать отдельную программу, в Linux есть стандартные средства, с помощью которых можно управлять удаленной машиной
HyperTerminal minicom Небольшая программа с большими возможностями