Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
#1

read(); write(); - C++

20.02.2013, 01:59. Просмотров 1363. Ответов 28
Метки нет (Все метки)

Вот такая вот небольшая программка

C++
1
2
3
4
5
6
fstream myFileReader("hardware.dat", ios::in | ios::out);
 
    int example = 1;
    myFileReader.write((char*) &example, sizeof(example));
    myFileReader.read((char*) &example, sizeof(example));
    cout << example;
У меня она выводит бред типа -803434434; только у меня такое?( просто боюсь, что на моём компьютере что-то со шрифтами, либо в коде я напортачил. Оказалось, что виноваты не шрифты моей винды. Но в самоучителе явно приведён похожий код на запись и чтение файлов, но там вывод почему-то абсолютно адекватный, а у меня мусор.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 01:59     read(); write();
Посмотрите здесь:

Функции write и read - C++
Здравствуйте, уважаемые! Вопросы по работе с файлом через fstream. Возник вопрос по поводу записи структуры в нужном месте файла....

Read and write binary file - C++
Ребята, срочно нужна помощь. Записываю класс Message с сообщениями в файл. struct Head { public: int who; int to; ...

Существуют ли в C++ аналоги делфийских write и read? - C++
Только час назад начал изучать С++ обшарил пол интернета но что то так и не соображу , есть ли тут аналог Делфевских Write и read ...

В чем разница между f.read(),f.write() и f<<., f>>.? - C++
В чем разница между f.read(),f.write() и f&lt;&lt;..., f&gt;&gt;...?

ofstream & ifstream :: binary read-write struct - C++
Не пойму в чем дело... но я не могу считать всю структуру FNTBINARY из файла, файл - это она и есть в бинарном виде, одна структура...

Передать из одного файла в другой текст построчно посредством read() write() - C++
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;fstream&gt; # include &lt;string&gt; using namespace std; int main () { ...

Как при помощи ф-ий read/write записать в файл, а потом считать с него - C++
Такой вопрос! Как при помощи ф-ий read/write записать в файл, а потом считать с него различные типы данных, как int,double, char, char. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 03:42     read(); write(); #16
Цитата Сообщение от Vourhey Посмотреть сообщение
Я лишь исправил твое неправильное предположение, что в линуксе данные записываются сразу. Чтобы ТС так же не думал. Потому что это неправда.
Согласен. Тогда для ТС поправлюсь. В Linux, после записи в файл, не нужно, перед последующим чтением из файла, делать flush()(в отличие от Windows). Теперь правильно?

Добавлено через 43 секунды
Цитата Сообщение от Vourhey Посмотреть сообщение
Вопрос задай по-нормальному. Потому что я вопроса не видел никакого.
10 пост.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 03:44     read(); write(); #17
Цитата Сообщение от alsav22 Посмотреть сообщение
10 пост.
Я его видел. Я не видел там вопроса.

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
В Linux, после записи в файл, не нужно, перед последующим чтением из файла, делать flush()(в отличие от Windows). Теперь правильно?
Нет. ОС тут не при чем. Если я возьму десяток реализаций стандартной библиотеки, то они могут работать по-другому. По-моему, ты в одну кучу мешаешь два совершенно не связанных друг с другом понятия: стандартная библиотека и ОС.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 03:48     read(); write(); #18
Цитата Сообщение от Vourhey Посмотреть сообщение
Я его видел. Я не видел там вопроса.
Ещё раз посмотри.
Цитата Сообщение от Vourhey Посмотреть сообщение
По-моему, ты в одну кучу мешаешь два совершенно не связанных друг с другом понятия: стандартная библиотека и ОС.
Очень может быть.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 03:51     read(); write(); #19
Проверил, как работает, на линухе. Стандартная библиотека в данном коде не использует внутренний буфер а пишет в буфер ОС:
C
1
2
3
open("file", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
write(3, "\1\0\0\0", 4)                 = 4
read(3, "", 8191)                       = 0
И значение "1" не фейлится не потому что оно "в файле". Потому что на момент чтения оно уже находится в буфере ядра. А записалось оно, или нет уже соврешенно не важно. При чтении данные берутся из буфера ядра. Потому что он связан с дескриптором.

Добавлено через 32 секунды
Цитата Сообщение от alsav22 Посмотреть сообщение
Ещё раз посмотри.
Посмотрел. Вопрос там отсутствует.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 03:54     read(); write(); #20
Цитата Сообщение от Vourhey Посмотреть сообщение
Стандартная библиотека в данном коде не использует внутренний буфер а пишет в буфер ОС:
Вот и я об этом! Только небольшое уточнение:"Стандартная библиотека в Linux в данном коде не использует внутренний буфер а пишет в буфер ОС..." В Windows же использует...
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 03:55     read(); write(); #21
точнее, он делает умнее. Он использует буфер, когда ты вызываешь write. пишется в буфер библиотеки. Когда ты вызываешь read потока с++, то вызывается для буфера потока write системный. И только потом уже системный read

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
В Windows же использует...
В линукс тоже. Я продебажил сейчас. Просто она умнее делает, когда ты вызываешь чтение. Она библиотечный буфер отдает ядру. Но не сбрасывает. так как отдачи уже достаточно для того, чтобы читать актуальные данные.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 03:57     read(); write(); #22
Цитата Сообщение от Vourhey Посмотреть сообщение
В линукс тоже. Я продебажил сейчас. Просто она умнее делает, когда ты вызываешь чтение. Она библиотечный буфер отдает ядру. Но не сбрасывает. так как отдачи уже достаточно для того, чтобы читать актуальные данные.
Хорошо. Но это что: другая реализация стандартной библиотеки? Именно для Linux? Или и для Windows есть реализации, которые так же работают?
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 03:58     read(); write(); #23
Цитата Сообщение от alsav22 Посмотреть сообщение
Но это что: другая реализация стандартной библиотеки?
Вопрос смешной А что же еще. Конечно. Я об этом твердил тебе с самого начала. Что рассматривая данную программу, ОС во внимание вообще брать нельзя. Она роли тут не играет ни на долю. Даже 0% участия ОС тут нет. Не понятно, чего ты там привязался к ОСи. Если я реализую стандартную библиотеку так, что она вообще никогда не будет записывать файл, то можно будет сказать, что "на винде файлы не записываются на диск". И в пример привест код, скомпиленый с моей библиотекой.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 04:01     read(); write(); #24
И про sync(). Этот метод не срабатывет в Linux для очистки потока. В Windows - работает.

Добавлено через 53 секунды
Цитата Сообщение от Vourhey Посмотреть сообщение
Вопрос смешной, честно. А что же еще-то.
До конца не ответил. Только для Linux такая реализация? Или и для Windows есть реализации, которые так же работают?
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 04:08     read(); write(); #25
Цитата Сообщение от alsav22 Посмотреть сообщение
Этот метод не срабатывет в Linux для очистки потока.
А метод чего? Метод класса стандартной библиотеки? Тогда вопрос не корректен, так как, сюда как-то попало слово Linux.
Цитата Сообщение от alsav22 Посмотреть сообщение
Только для Linux такая реализация?
Я не знаю все реализации библиотек. Я знаю, что они различные и она не одна. А на какой ОС либа работает значения не имеет никакого. Любой вопрос, кто и как себя ведет - адресуй авторам библиотеки. Потому что в линуксе буферизация работает гарантированно. Независимо от того, какую библиотеку ты используешь.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 04:09     read(); write(); #26
Реализации стандартной библиотеки, они, ввобще, как различаются-определяются? По компилятору? По среде?
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 04:10     read(); write(); #27
Цитата Сообщение от alsav22 Посмотреть сообщение
Только для Linux такая реализация?
Хотя, учитывая, что библиотеки могут быть любые, то можно ответить - нет, не только. Найди нужную, или напиши свою.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 04:18     read(); write(); #28
Цитата Сообщение от Vourhey Посмотреть сообщение
Хотя, учитывая, что библиотеки могут быть любые
Разговор о стандартной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 04:35     read(); write();
Еще ссылки по теме:

Пример функции для изменения региона защиты памяти процесса с Read Only на Write Copy - C++
будьте добры привести пример функции для изменения региона защиты памяти процесса с Read Only на Write Copy VirtualAlloc - не подходит

write - C++
Нужно записать данные контейнера в файл: #include&lt;iostream&gt; #include&lt;string&gt; #include&lt;vector&gt; #include&lt;fstream&gt; ...

Write из Pascal в C++ - C++
Добрый вечер уважаемые форумчане. Подскажите пож. как переделать код на C++ из Pascal WRITE( Inp:2:0 ); WRITELN(' ...

Write из fstream - C++
Здравствуйте!) Не могу понять, как пишет данные в файл функция write( То есть мы с помощью seekp указали позицию в потоке (файле) и...

вопрос по ostream::write(). - C++
ostream&amp; ostream::write ( const char* s , streamsize n ); почему эта функция получает первым аргументом указатель на чар? в смысле не...


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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 04:35     read(); write(); #29
Цитата Сообщение от alsav22 Посмотреть сообщение
Разговор о стандартной.
И? libstdc++. Как видишь, буферизация там прекрасно работает. И на уровне библиотеки в том числе. И все это добро к слову "Linux" и к "а я разницу вижу" отношения не имеет. С тем, какие они еще есть и как в них, что реализовано - разбирайся сам.

Добавлено через 8 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
Реализации стандартной библиотеки, они, ввобще, как различаются-определяются? По компилятору? По среде?
Так же, как любая функциональность, которую пишут разные программисты под разные платформы. Функциональность реализовывают, но каждый может по-своему что-либо сделать опираясь на стандарт.
Слинковаться можно с любой библиотекой. Среда и компиляторы не важны.
Yandex
Объявления
20.02.2013, 04:35     read(); write();
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru