Читать «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 | Небольшая программа с большими возможностями |