Статус нашего сайта: |
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Вызов 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 получают входные данные из стандартного ввода и записывают выходные данные в стандартный вывод. Такие программы называются фильтрами. |