Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24

Не могу понять, как "живут" файловые указатели

22.01.2016, 15:53. Показов 703. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять как живут файловые указатели...
Есть у меня файл, и пишу в него 100 интов. Указатель ввода сдвигается на 400, так и надо. Но почему так же сдвигается и указатель вывода?.... он ведь должен менять значение тогда когда я файл читаю.

и чего я не понимаю еще больше - почему воспользовавшись функцией seekg() у меня изменил свою позицию на 0 не только указатель ввода, но и указатель вывода откатился на 0.
Помогите разобраться..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   fstream file;
   file.open( "text.txt", ios::in | ios::out | ios::trunc | ios::binary );
 
   for( int i( 0 ); i < 100; ++i )
   {
      file.write( reinterpret_cast< char* >( &i ), sizeof( i ) );
   }
 
   int pos_in_1 = file.tellp();
   int pos_out_1 = file.tellg();
 
   cout << "in: " << pos_in_1 << '\t' 
        << "out: " << pos_out_1 << endl;
 
   file.seekg( 0 );
 
   pos_in_2 = file.tellp();
   pos_out_2 = file.tellg();
 
   cout << "__________________________________________\n";
 
   cout << "in: " << pos_in_2 << '\t' 
        << "out: " << pos_out_2 << endl;

результат:
400 400
________
0 0
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2016, 15:53
Ответы с готовыми решениями:

Указатели не могу понять
Все вопросы указал в комментариях к коду. Не могу понять почему так #include &lt;iostream&gt; using namespace std; int main() { ...

Не могу понять зачем нужны указатели?
Не как не могу понять зачем нужны указатели. Я знаю что их надо использовать для выделения памяти, но раньше я и без них обходился

Строки (массив char), указатели. Не могу понять логику! Help!
Вообщем проблема в том что выводятся лишние символы в строках.. хотя в них есть признак окончания строк - нулевой байт я новичок в С...

10
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
22.01.2016, 16:41
Из стандарта:
A joint file position is maintained for both the input sequence and the output sequence.
0
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24
22.01.2016, 16:45  [ТС]
И в чем тогда смысл иметь два указателя, если их значение меняются одинаково ?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
22.01.2016, 16:52
Цитата Сообщение от Гр Хо Посмотреть сообщение
И в чем тогда смысл иметь два указателя
Смысл в том, что поток для чтения и поток для записи - два разных класса, а поток для чтения и записи одновременно от них унаследован.
0
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24
22.01.2016, 17:00  [ТС]
Не въезжаю... при чем тут наследование вообще.
В моем понимании: есть файл, у этого файла есть два указателя - на вход и на выход. При каждом выполнении операции ввода или вывода соответствующий указатель автоматически перемещается, последовательно изменяя свою позицию.
И на пальцах все понятно, но почему это работает иначе?.. Поправь меня плиз.
И как сделать, что бы они вели себя так, как это подразумевается логически.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
22.01.2016, 17:11
Цитата Сообщение от Гр Хо Посмотреть сообщение
как это подразумевается логически
Кем подразумевается?

Файл - это абстракция устройства с последовательным доступом. Есть например такие устройства - "стриммеры" (название ни на что не намекает?). Там запись идет на магнитную ленту. И не важно читали вы или писали - лента перемоталась вперед.

Цитата Сообщение от Гр Хо Посмотреть сообщение
при чем тут наследование вообще
При том, что если этот метод обозвать seek - будет неоднозначность.
0
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24
22.01.2016, 17:22  [ТС]
Заранее спасибо, что взялся мне объяснить Не агрись только

Цитата Сообщение от avgoor Посмотреть сообщение
При том, что если этот метод обозвать seek - будет неоднозначность.
это понятно, с этим никто и не спорит.

Цитата Сообщение от Гр Хо Посмотреть сообщение
В моем понимании: есть файл, у этого файла есть два указателя - на вход и на выход. При каждом выполнении операции ввода или вывода (!!!!)СООТВЕТСТВУЮЩИЙ указатель автоматически перемещается, последовательно изменяя свою позицию.
вот скажи - я в этом не прав ?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
22.01.2016, 17:33
Цитата Сообщение от Гр Хо Посмотреть сообщение
вот скажи - я в этом не прав ?
Не прав. У того, что fstream олицетворяет физически, нет двух указателей. Есть только один.

Вот представь, что файл физически находится на магнитной ленте. Как организовать твои два указателя?
1
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24
22.01.2016, 17:42  [ТС]
тооо есть, если я правильно въезжаю - методы seekq, tellq и seekg, tellg в случаи с fstream работают соотвственно одинаково?
не важно как я тащу указатель, читая или записывая - он только один и я могу его изменить как мне надо любым методом, что seekg что seekq
то же самое касается и методов tellg/tellq

верно?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
22.01.2016, 18:04
Цитата Сообщение от Гр Хо Посмотреть сообщение
верно?
Да. Но все же лучше перед чтением вызывать seekg(), а перед записью seekp() (Если потом fstream поменяешь, скажем, на ifstream - меньше переписывать).
1
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24
22.01.2016, 18:13  [ТС]
Спасибо большое за помощь. Вот только последний вопрос, я тебя еще помучаю .
Почему при открытии файла вызовав функцию tellp()/tellq() она вернет в любом случаи 0, даже тогда, когда в файле есть какая то информация?

пс: ios::app использую
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2016, 18:13
Помогаю со студенческими работами здесь

Символьные литералы, указатели и функция. Не могу понять, почему именно так
Доброго времени суток всем! :) Изучаю С++, всегда стараюсь добить до последнего код, чтобы не было непоняток. Но сейчас наткнулся на...

Файловые указатели. Потоки
Вот какой вопрос у меня появился. Пусть есть 2 указателя, связанных с одним и тем же файлом открытым в режиме read. Если я считываю...

Как создать данную задачу? Не могу понять задание. Как понять все операции контролировать через порт С?
Считать данные с порта D. Установить сначала во втором разряде числа «1», а потом в четвертом - «1» (с помощью команды BSF). Все операции...

Как понять поставленную задачу. Не могу понять этот полиморфизм?
A software academy teaches two types of courses: local courses that are held in some of the academy’s local labs and offsite courses held...

Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
Стек статически (на основе массива структур). Пример структура &quot;Товар&quot; которая включает в себя: № по каталогу(ключ), Название, цена, срок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru