|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
Существует ли EOF или это миф?16.08.2009, 00:08. Показов 9230. Ответов 34
Метки нет (Все метки)
Собственно говоря, раньше у меня этот вопрос сомнений не вызывал. Есть файл- есть конец файла и умные проги автоматом добавляют в конец ff
...А тут что-то вплотную занялся функциями, работающими с файлами- нет EOFа в Hiewе. Ну, то есть нет и всё. Я и текстовые файлы в Hiewе открывал и исполнимые- нет EOFа. Но при программном считывании текстового файла в конце почему-то всё-таки выводится -1 ...Так. А сама-то система как определяет, что найден конец файла? Допустим, в памяти расположен текстовый файл. И она его открывает, загружает то есть в оперативную память. Раньше понятно было- загружает посимвольно, пока не встретится ff. Встретился, она и его загрузила, всё на этом. А если ff нет (а его ведь нет!)? Как же машина определит, что ЗАГРУЗКУ ФАЙЛА ПОРА ПРЕКРАЩАТЬ? ...В общем, я запутался. Помогите распутаться, пожалуйста.
0
|
|
| 16.08.2009, 00:08 | |
|
Ответы с готовыми решениями:
34
PHP Антивирус. Это есть или миф? VBA это миф или реальность в русской раскладке? |
|
Почетный модератор
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
|
|
| 17.08.2009, 15:22 | |
|
Хорошо в Паскале. Обрабатываешь нажатие клавиш, нажимаешь Ctrl-Z, на экране 26.
Читаешь текстовый файл посимвольно while c<>#26 do .......................... считаешь и выводишь символы, символов на 1 больше чем количество введенных +по 2 невидимых на каждую строку, последним выводит такую стрелочку вправо, это и есть №26, или конец файла.
0
|
|
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
||
| 17.08.2009, 16:11 | ||
0
|
||
|
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 446
|
|
| 17.08.2009, 16:22 | |
|
Puporev, "файлы" бывают разные. Клавиатура, это не совсем "файл", это поток ввода, и как любому потоку ему нужен подобный маркер. Пропускать или нет этот маркер в процесс читающий такой файл - дело системы и процесса. Но те файлы, у которых известна длинна и то, что записано на диске, в маркере конца не нуждаются, к тому же при этом пустые файлы требовали бы иметь этот маркер, а работа с бинарными данными вообще была бы противоестественной, т.к. пришлось бы мудрить с заменой числа 26 в в подобных файлах.
Представьте себе работу с файлом изображения, в котором возможно такое значение яркости канала.
0
|
|
|
|
|
| 17.08.2009, 17:57 | |
|
skvor, с чем мы работаем, с файлом или потоком стандартного ввода - для пользовательского процесса это всё "файл". Вся работа накрыта интерфейсами типа feof (возвращает признак конца файла), fgetc (которая возвращает прочтённый байт или EOF) и куча прочего всего, которое работает через ОС (но никак не напрямую с файлом или устройством). А ОС уже сама подсунет этим процедурам что надо, при этом внутри ОС работа с настоящими файлами пойдёт по одной ветке, с устройствами по другой. Весь этот геморой сосредоточен в ОС, чтобы всё это было реализовано один раз, а для всех пользовательских задач и файлы и устройства и ещё чёрт-те что выглядело как "просто файл"
По крайней мере так в юниксах
0
|
|
|
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 446
|
|
| 17.08.2009, 18:00 | |
|
Evg, так я об том и пишу! Только я думаю, лучше считать, что система делает обёртку для файла, делая из этого файла поток.
Тут ещё с терминологией забодаться десять раз. Но считать клавиатуру файлом нельзя - (1) её не переименовать, (2) у неё нет размера. А то, что в DOS-е 26-ой код, так это можно списать на происки БГ.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 17.08.2009, 18:18 [ТС] | |
|
...Рано написал выводы, прошу прощенья.
0
|
|
|
Почетный модератор
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
|
||
| 17.08.2009, 19:14 | ||
|
Все-таки иногда используется код 26. Вот из Вики.
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||
| 17.08.2009, 20:03 | ||
|
Вот я почему-то сомневаюсь, что на вики имели ввиду NTFS-ные файлы. Если и на NTFS так, то это пипец...
![]()
0
|
||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 17.08.2009, 20:07 | |
|
2Vourhey: Это и на NTFS так, но NTFS тут совершенно не при чем
![]() Это внутри C-ных функций чтения файла. Если файл открыт в текстовом режиме и попался символ EOF, то считаем что произошла ситуация EOF (то есть достигнут конец файла).
0
|
|
|
|
||
| 10.04.2012, 20:56 | ||
|
Чтобы реально затереть данные в файле можно попробовать написать либо свой файловый парсер FAT или NTFS(что уже затруднительно) либо поюзать SetEndOfFile http://vsokovikov.narod.ru/New... offile.htm
0
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 26.06.2015, 13:31 | ||
|
Во первых это не маразм. И копировать нормально никакой проблемы нет. Правильный ответ : - Существовали когда-то операционные системы, в которых длина файла в байтах не хранилась в файловой системе нигде. Хранилась только длина в блоках (в привычной Вам терминологии - в секторах диска). Пример такой ОС - RT-11. И, кстати, в сравнении с MS-DOS - это RT-11 нормальная. - Ну а если в файловой системе хранится длина файла в блоках, то в текстовых файлах однозначно требуется управляющий символ, означающий конец текста. Потому-что в текстовом файле после окончания текста и до конца последнего блока файла будут нулевые или иные мусорные байты и надо как-то текст от них отделить. Но это символ НЕ конца ФАЙЛА ! А конца ТЕКСТА ! И этот символ - это именно Ctrl-Z с кодом 26. - Когда файлы копируются их содержимое не учитывается никак. Копируются блоки файла и все. - Когда файл выводится на терминал, а терминал печатает текст, то когда появляется символ Ctrl-Z вывод текста прекращается. Т.е. Ctrl-Z - это УПРАВЛЯЮЩИЙ СИМВОЛ ДЛЯ ТЕРМИНАЛА, ОЗНАЧАЮЩИЙ КОНЕЦ ТЕКСТА. Ну точно также, как Ctrl-M Ctrl-J = 13 10 для терминала означает возврат каретки и перевод строки. Терминал исполняет управляющие символы вместо их вывода и Ctrl-Z - один из них. Добавлено через 10 минут P.S. Хотя тут детали я уже позабыл. Или это команда TYPE перестает валить текст на терминал, когда встречает Ctrl-Z ? Факт, что Ctrl-Z как-то учитывается только в одном случае - когда выводится текст на терминал или принтер. И появление Ctrl-Z маркирует ситуацию "текст кончился, а файл, содержащий этот текст и из блоков состоящий, еще нет, но то, что там дальше в файле - это уже не текст" Добавлено через 5 минут P.P.S. Короче Ctrl-Z - это не признак конца файла, а признак конца текста и он родился из инженерного решения длину файла в байтах в файловой системе на блочных устройствах не хранить, хранить только длину в блоках. Добавлено через 6 минут А вот что этот символ делает в MS-DOS (и по наследству в виндозной командной строке), где он не нужен (раз длина файла в байтах есть, то он не нужен) - этого я не знаю. Факт, что команда TYPE командной строки MS-DOS перестает выводить текст из файла, когда его встретит.
5
|
||
| 26.06.2015, 14:11 | ||
|
1
|
||
|
|
|
| 27.06.2015, 08:49 | |
|
Для конца файла EOF нет! Реально противно читать : когда падаёт файловая система, вы на HDD по EOF файлы ищете?а дифрагментация - т.е лежит себе такой кусок текстового файла(в 1кБ) пусть с принудительно записанным в него EOF(взяли и -1 записали а **ле), а в другом месте лежит другой кусок с началом(а между кусками 2 Гб места), а вы такие файловым read идёте себе такие по байтам пока ЕОФ не встретите... Вроде свиду гора понимающих людей, когда доходит до дела - на практике готовы обсуждать всякую чушь лишь бы не открыть простой учебник, да не посмотреть инфу. И я уверен скоро налетит туча людей поспорить что мол я зов не знаю и в таком роде=) Короче открываем "Записи каталога FAT" или просто берём и читаем немного о структуре файловых систем.
Не по теме: EOF - это уже примитивный навес АПИ над файловой системой и то на начальном этапе написания были такие финты, текстовый стрим вконце добивался теминатором, который можно было сохранить в текстовик и сбить это же АПИ с толку, да мне ну просто для ликбеза, кто мне покажет EOF в бинарном файле?(может быть вот эта -1 или м.б эта?) Добавлено через 10 минут
0
|
|
|
|
||
| 27.06.2015, 12:21 | ||
|
0
|
||
| 27.06.2015, 12:21 | |
|
Помогаю со студенческими работами здесь
35
DirectX 10 для Windows XP это миф или его действительно крякнули? Как найти хорошую интересную работу и чтоб платили много? Или это миф? Существует ли способ генерирования события или сигнала в коде там, где это необходимо? EOF что это Скорость трения (именно в такой формулировке) – существует, или всё-таки это неправильно обозвали другое понятие? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|