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

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

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

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; только у меня такое?( просто боюсь, что на моём компьютере что-то со шрифтами, либо в коде я напортачил. Оказалось, что виноваты не шрифты моей винды. Но в самоучителе явно приведён похожий код на запись и чтение файлов, но там вывод почему-то абсолютно адекватный, а у меня мусор.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 03:55     read(); write(); #21
точнее, он делает умнее. Он использует буфер, когда ты вызываешь write. пишется в буфер библиотеки. Когда ты вызываешь read потока с++, то вызывается для буфера потока write системный. И только потом уже системный read

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

Добавлено через 53 секунды
Цитата Сообщение от Vourhey Посмотреть сообщение
Вопрос смешной, честно. А что же еще-то.
До конца не ответил. Только для Linux такая реализация? Или и для Windows есть реализации, которые так же работают?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 04:08     read(); write(); #25
Цитата Сообщение от alsav22 Посмотреть сообщение
Этот метод не срабатывет в Linux для очистки потока.
А метод чего? Метод класса стандартной библиотеки? Тогда вопрос не корректен, так как, сюда как-то попало слово Linux.
Цитата Сообщение от alsav22 Посмотреть сообщение
Только для Linux такая реализация?
Я не знаю все реализации библиотек. Я знаю, что они различные и она не одна. А на какой ОС либа работает значения не имеет никакого. Любой вопрос, кто и как себя ведет - адресуй авторам библиотеки. Потому что в линуксе буферизация работает гарантированно. Независимо от того, какую библиотеку ты используешь.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 04:09     read(); write(); #26
Реализации стандартной библиотеки, они, ввобще, как различаются-определяются? По компилятору? По среде?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.02.2013, 04:10     read(); write(); #27
Цитата Сообщение от alsav22 Посмотреть сообщение
Только для Linux такая реализация?
Хотя, учитывая, что библиотеки могут быть любые, то можно ответить - нет, не только. Найди нужную, или напиши свою.
alsav22
5282 / 4801 / 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();
Еще ссылки по теме:

C++ copy on write оптимизация
write C++
C++ Функция write open не работает

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6468 / 2243 / 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();
Ответ Создать тему
Опции темы

Текущее время: 00:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru