Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.376


Таненбаум Э.- Архитектура компьютера. стр.376

Вызов open используется для открытия существующих файлов, а также для создания новых. Флаг mode сообщает, как его открывать (для чтения, для записи и т. д.). Вызов возвращает небольшое целое число, которое называется дескриптором файла. Дескриптор файла идентифицирует файл при последующих вызовах.

Сам процесс ввода-вывода осуществляется вызовами read и write, каждый из которых в качестве параметров получает дескриптор файла (он указывает, какой файл использовать), буфер для данных и число передаваемых байтов. Вызов 1 seek используется для перемещения файлового указателя, что делает возможным доступ к произвольному месту в файле.

Вызов stat возвращает информацию о файле (размер, время последнего доступа, имя владельца и т. п.), вызов chmod изменяет режим защиты файла (например, разрешает или, наоборот, запрещает каким-нибудь пользователям читать его), наконец, вызов f cntl позволяет выполнять различные действия с файлом, например, блокировать или разблокировать.

В листинге 6.3 показано, как происходит процесс ввода-вывода. Эта минимальная по объему программа, которая не включает в себя код проверки ошибок. Перед тем как войти в цикл, программа открывает существующий файл data и создает новый файл newf. Каждый вызов возвращает дескриптор файла infd или outfd соответственно. Следующий параметр в обоих вызовах — биты защиты, которые определяют, что файлы нужно считать и записать соответственно. Оба вызова возвращают дескриптор файла. Если вызов open или créât оказывается неудачным, возвращается отрицательный дескриптор файла.

Листинг 6.3. Фрагмент программы для копирования файла с использованием системных вызовов UNIX. Этот фрагмент написан на языке С, поскольку в языке Java нельзя показать необходимые нам низкоуровневые системные вызовы

/* Получение дескриптора файла. */

infd = open("data". 0) ;

outfd = creat("newf", ProtectionBits);

/* Цикл копирования. */

do {

count = readCinfd, buffer, bytes); if (count > 0) write(outfd, buffer, count); } while (count > 0);

/* Закрытие файлов.*/ close(infd); close(outfd);

Вызов read имеет три параметра: дескриптор файла, буфер и число байтов. Данный вызов должен считать нужное число байтов из указанного файла в буфер. Число считанных байтов помещается в переменную count. Значение count может быть меньше, чем bytes, если файл окажется слишком коротким. Вызов write копирует считанные байты в выходной файл. Цикл продолжается до тех пор, пока входной файл не будет прочитан полностью. Тогда цикл завершается, и оба файла закрываются.

Дескрипторы файлов в UNIX представляют собой небольшие целые числа (обычно до 20). Дескрипторы файлов 0, 1 и 2 соответствуют стандартному вводу, стандартному выводу и стандартной ошибке соответственно. Обычно первый из них относится к клавиатуре, а второй и третий — к дисплею, хотя пользо ватель может перенаправить любой стандартный поток ввода-вывода в файл. Многие программы UNIX получают входные данные из стандартного ввода и записывают выходные данные в стандартный вывод. Такие программы называются фильтрами.


⇐ Предыдущая страница| |Следующая страница ⇒

.