|
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 13
|
|||||||||||
Обмен данными между процессами с помощью файлов, которые отображаются в память23.11.2011, 22:35. Показов 5335. Ответов 13
Метки нет (Все метки)
Классическая задача "читатели-писатели", обмен информацией должен проходить с помощью файлов, отображаемых в память. Задание уже готово, но имеет один неприятный баг - при дебагинге видно, что при вводе длинных строк программа вешается, из-за того, что первый байт файла в памяти, почему-то, устанавливается в нуль. Собственно, прошу объяснений и помощи, форумчане.
![]() Ниже фрагменты программы, в которых идёт конкретно работа с файлом. Эта ошибка происходит где-то тут. Код писателя:
0
|
|||||||||||
| 23.11.2011, 22:35 | |
|
Ответы с готовыми решениями:
13
Обмен данными между процессами Обмен данными между процессами Обмен данными между двумя процессами |
|
Заблокирован
|
|
| 26.11.2011, 17:27 | |
|
sergeyotro, есть вероятность, что строка более 99 символов. У тебя же в массиве их только 99...
0
|
|
|
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 13
|
||
| 26.11.2011, 18:00 [ТС] | ||
|
Если строка больше 99 символов - то в файл, отображаемый в память, пишется только 99 и не больше. Вопрос не в переполнении, а в том, куда пропадает 1 байт, когда клиент копирует данные себе.
0
|
||
|
Заблокирован
|
|
| 26.11.2011, 18:24 | |
|
sergeyotro, дело в том, что у строк есть завершающий нуль-символ, поэтому в массив из 10 символов влезет только 9.
0
|
|
|
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 13
|
|||
| 26.11.2011, 19:54 [ТС] | |||
|
Вы же не хотите сказать, что нуль-терминированные строки символ окончания пишут своим первым байтом?
0
|
|||
|
|
|||||||
| 26.11.2011, 20:20 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 13
|
|
| 26.11.2011, 20:30 [ТС] | |
|
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 26.11.2011, 20:35 | ||
|
Добавлено через 1 минуту И есть ещё формат строк, в котором первый байт - счётчик, а терминального ноля нет, но в восьми битах максимально можно закодировать не 99, а 255. Если же байтов счётчика сделать два, то для всех строк короче 256-ти символов первый байт будет обнулён.
0
|
||
|
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 13
|
|||
| 26.11.2011, 20:57 [ТС] | |||
|
0
|
|||
|
|
||||||
| 26.11.2011, 21:08 | ||||||
|
Посмотрите вот здесь. Кажется, проблемы схожи, хоть суть их и не вполне ясна.
Попробуйте писать массив в файл с индекса 1, что-то вроде этого:
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 13
|
||
| 26.11.2011, 21:46 [ТС] | ||
|
В данной ситуации, без поинтера, всё выглядит вот так всё: Это происходит у "писателя" А это происходит у читателя, первый бит в нуль.
0
|
||
|
|
|
| 26.11.2011, 22:53 | |
|
Какая странная штука
![]() Порылся в справке по WinApi функциям, что вы используете - все, по идее, должно быть в норме... Остается, по ходу, одно: trace into в debugger'e до тех пор, пока состояние первого байта не изменится... Добавлено через 10 минут И, сдается мне, на крайний случай можно-таки писать в файл/читать из него, исключая первый байт. Инкремент адреса файла в памяти на размер одного элемента массива - вполне осуществимая вещь.
0
|
|
|
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 13
|
||
| 26.11.2011, 22:58 [ТС] | ||
|
Странное поведение cin.
0
|
||
|
|
|
| 26.11.2011, 23:30 | |
|
Когда getline выбирает из потока 99 символов, она не только прекращает выборку, но и ставит потоку флаг failbit, что, вероятно, мешает функции getline получить повторный доступ к потоку на втором проходе цикла do{}while. Возможно, в этом причина изменения первого байта файла - на втором проходе цикла функция getline обламывается и пишет в буфер первый байт нулевым, затем буфер копируется в файл и читатели получают свою null-started string.
Вызов clear() очищает все флаги ошибок и на повторном доступе к потоку функция getline выбирает то, что там осталось и добросовестно пишет в буфер, который не менее добросовестно копируется в файл. Теоретически, как-то такО_о
0
|
|
| 26.11.2011, 23:30 | |
|
Помогаю со студенческими работами здесь
14
Обмен данными между процессами в консольных приложениях Обмен данными между процессами Обмен данными между программами Технология обмен данными между приложениями Обмен данными между двумя динамическими массивами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|