![]() |
|
Модераторы: bsa |
![]()
|
|
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| Twelves |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 22.6.2011 Репутация: нет Всего: нет |
А что на счет бинарного режима в юникс? там же все файлы вроде считаются текстовыми? <извините, просто опыта работы с никс системами у меня нет>
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Язык С пришел из мира UNIX (именно для написания самого юникса он и создавался). В юниксе конец строки что в коде, что в файлах не отличается - это символ '\n'. А вот в MSDOS его создатель пошел другим путем - он сделал конец строки состоящим из двух последовательных байт "\r\n". Так как по стандарту языка С требуется, чтобы строки заканчивались на '\n', то функции чтения некоторых ОС (Windows, DOS и к ним приближенных) заменяют последовательность символов \r\n на \n, а функции записи в файл производят обратную операцию. Но эта операция может повредить двоичные данные, поэтому в этих ОС (и только в них) был введен специальный режим - двоичный, который активируется добавлением флага O_BINARY в функцию open или "b" в fopen. В UNIX этих флагов вообще нет, поэтому программист обязан окружать использование этого флага #ifdef _WIN32/#endif |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
bsa
ну что вы куйню пишете как лузер последний а?
в каком нафиг коде ? wiki и не надо путать теплое с мягким, ОС и С lib это разные весчи. в ОС нет понятия текстовый или бинарный файл, ей все равно. гуглите параметры для sys_create (nix) и CreateFile (win) -------------------- |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Может мы с тобой еще на уровень машинных кодов опустимся? Зачем новичка грузить "ОС" или "libc"? Тем более, что в стандарте языка С нет ни sys_create, ни CreateFile. Поэтому их мы не обсуждаем. По поводу конца строки, возможно, я не так выразился. Поэтому следует читать "символ разрыва строки" вместо "символ конца строки". P.S.: возможно, это и непонятно, но для системы нет отличий, текстовый файл или нет. Все проблемы вытекают только из-за представления разрыва строки в разных ОС. Именно поэтому требуется указывать при открытии файла, что за содержимое в нем. |
||||||
|
|||||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
0_BINARY в Линуксе нет. Но писать #ifdef не обязательно. достаточно один раз в своём заголовке написать
"b" в fopen() действительно игнорируется аналогично с std::ios::binary Это сообщение отредактировал(а) math64 - 2.11.2011, 15:06 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |