LINUX.ORG.RU

Сохранение данных в файл


0

1

Всем привет!

Изучаю CPP и пишу не большую программку, необходимо реализовать сохранение данных в файл. Я сперва взялся за sqlite но мне стало интересно как можно самому организовать подобие бд. SQL не нужен и запросы тоже, только чтение и запись.

struct Person
{
    char *name;
    int age; 
}

Пока два варианта. Сделать name массивом или два файла, один смещения хранит другой данные. Что посоветуете?



Последнее исправление: RA (всего исправлений: 1)

Ответ на: комментарий от bk_

Посылка приложению сигналов не нужна

Скажи это SIGPIPE'у, от которого, кстати, твой сервер в линанксе будет валиться на раз-два от записи в закрытый сокет.

red_eyed_peguin
()
Ответ на: комментарий от bk_

Да, и откуда ты знаешь, что fwrite не дергает write по каждому поводу, а буферизует во внутренний буфер?

1. Из стандарта C

2. Из исходников glibc

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin

Именно для этого в нормальных ядрах ОС есть SO_NOSIGPIPE. А в

линанксе

я, так и быть, заигнорю этот сигнал.

Зачем мне этот сигнал, если read/write все равно вернет -1 и errno. В любом случае, это ошибка, и общение по этому сокету прекратится.

bk_ ★★
()
Ответ на: комментарий от red_eyed_peguin

На второе мне похер, а вот первое почитал, да, так и есть. Не знал, благодарю.

bk_ ★★
()
Ответ на: комментарий от bk_

Именно для этого в нормальных ядрах ОС есть SO_NOSIGPIPE. А в

Не знал, что в мире бывают нормальные ядра кроме linux-x.y.z.tar.bz2. Писать в README «portable», а потом использовать хаки для убогого макосьного (?) ядра — это Ъ

Зачем мне этот сигнал, если read/write все равно вернет -1 и errno

Этот сигнал без долгих прелюдий завершит твое приложение.

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin

И, да, если ты такой спец, то не подкинешь, может быть, сорцов, как делаются правильные сериализаторы? Твой совет про google protocols я еще не смотрел, вечером гляну.

bk_ ★★
()
Ответ на: комментарий от red_eyed_peguin

Не знал, что в мире бывают нормальные ядра кроме linux-x.y.z.tar.bz2. Писать в README «portable», а потом использовать хаки для убогого макосьного (?) ядра — это Ъ

Я думал, ты опытнее, раз так категорично рассуждаешь. Кроме линукса, представь, еще много UNIX-систем. И SO_NOSIGPIPE - фича BSD систем.

Писать в README «portable», а потом использовать хаки

Как раз таки, это хаки для линукса - игнорить сигнал. А программа таки portable, разве нет? Комплится без единого ворнинга и ошибки.

для убогого макосьного (?) ядра — это Ъ

Школотная категоричность. Она тебя не красит.

bk_ ★★
()
Ответ на: комментарий от wota

Это вариант нумер цвай, но я использую read, а не recv*().

bk_ ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.