Программа получает имена файлов из командной строки при запуске и позволяет копировать произвольные файлы, (см. аналог этой программы в §7.1.3).
Константа BUFSIZ (размер буфера для потокового ввода-вывода) определена в заголовочном файле stdio.h. Ее значение для MS-DOS равно 512 байт.
Для применения этой программы в ОС MS-DOS необходимо вначале построить исполняемую программу (см. гл. 9), например, copyf.exe. Вызов программы из командной строки будет иметь вид:
где -файл-источник;
- файл-приемник.
Если ошибок при исполнении программы нет, файл будет скопирован, но никаких сообщений на экране дисплея не появится.
В приведенных выше программах с функциями ввода-вывода низкого уровня обмен с файлом осуществлялся последовательно. При необходимости файл можно читать на низком уровне и в произвольном порядке. Так же как это делалось при работе с потоками, можно изменять значение указателя текущей позиции чтения/записи в файле. Для этой цели служит функция lseek( ). Прототип этой функции имеет следующий вид:
Функция lseek( ) изменяет текущую позицию в файле, связанном с дескриптором fd, на новую, определяемую смещением (второй параметр - offset) относительно выбранной точки отсчета (третий параметр - origin).
Точка отсчета задается одной из предопределенных констант, размещенных в заголовочном файле io.h (MS-DOS) или файле unistd.h(UNIX):
SEEK_SET (имеет значение 0) - начало файла;
SEEK_CUR (имеет значение 1)-текущая позиция;
SEEK_END (имеет значение 2) - конец файла.
При удачном завершении функция lseek( ) возвращает новую текущую позицию чтения/записи, представляющую собой смещение от начала файла. Попытка переместиться за пределы файла считается ошибкой. Код ошибки заносится в глобальную переменную еrrnо, определенную в заголовочном файле errno.h.
Для определения текущей позиции в файле можно использовать функцию tell( ), прототип которой имеет следующий вид:
Приведем примеры использования функции lseek( ).
Пример 1.
Установка текущей позиции в файле на его начало:
Пример 2.
Установка текущей позиции для последующего добавления данных в файл (позиция в конце файла):