- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
string=(char*)malloc(N);
k=fread(string,sizeof(char),N,f);
while (k==N)
{
free(string);
N=N*2;
rewind(f);//возращает в начало файла
string =(char*)malloc(N);
k=fread(string,sizeof(char),N,f);
}
fclose (f);
Bart 22.12.2013 01:53 # +6
kegdan 22.12.2013 06:53 # −1
bormand 22.12.2013 07:59 # +3
bormand 22.12.2013 07:58 # +4
> N=N*2;
> rewind(f);
> string =(char*)malloc(N);
Не рассказывали студентам про realloc() или хотя бы про memcpy()?
bormand 22.12.2013 09:37 # +2
inkanus-gray 22.12.2013 13:14 # +3
Soul_re@ver 22.12.2013 14:06 # +2
bormand 22.12.2013 15:58 # +2
P.S. Если это Си, то каст в (char*) тоже не нужен.
Soul_re@ver 22.12.2013 09:41 # +2
Ни проверки кода возврата, ни попытки определения размера файла...
bormand 22.12.2013 11:30 # 0
Ну это уже ССЗБ. Для таких файлов идиома "засосать файл целиком в оперативу", имхо, непригодна даже если ее правильно реализовать... Тут уже надо думать в сторону потоковой обработки или маппинга.
> malloc может обломаться
> проверки кода возврата
Ну кто же в лабах проверяет коды возврата? ;) Тут вон даже в энтерпрайзненькой жабе умудрились просрать ошибку записи (см. #14254).
someone 22.12.2013 11:57 # +1
Нас в своё время заставляли проверять абсолютно все коды возврата, в том числе из malloc. И вручную освобождать всю выделенную память, несмотря на то, что при завершении процесса ОС всё равно её освободила бы.
bormand 22.12.2013 12:02 # +2
И это хорошо. Нас не заставляли, работает на контрольных примерах и ладно :(
> при завершении процесса ОС всё равно её освободила бы.
Ну-ну. А если процесс завершится через 360 дней, на следующей профилактике железа? :)
Lure Of Chaos 22.12.2013 12:51 # +7
я как уже тогда имел опыт программирования, так мне было легко, а однокурсники страдали.
я тоже страдал, но по другому поводу: это был курс VB6, а там много неудобств было.
Soul_re@ver 22.12.2013 13:19 # +2
kegdan 22.12.2013 13:27 # 0
1024-- 22.12.2013 13:03 # +1
Тут скорее про реентерабельность и чистоту говорить надо. Сферические 360 дней в вакууме нечасто встречаются, а вот когда не помнишь, как использовать свою функцию, чтобы нигде не бомбануло, начинаешь писать чуть более прямой код.
kegdan 22.12.2013 13:16 # 0
anonimb84a2f6fd141 22.12.2013 23:39 # 0
anonimb84a2f6fd141 22.12.2013 23:38 # +1
Проблема скорее в том, что код может использоваться как модуль.
someone 23.12.2013 14:52 # 0
Это же не демоны были, где было чему течь, а достаточно простые консольные утилитки.
bormand 23.12.2013 16:08 # 0
anonimb84a2f6fd141 23.12.2013 19:02 # +1
bormand 23.12.2013 19:26 # 0
Тоже верно ;) Но я тут о случаях, когда почему-то все-таки надо писать именно на нем.
anonimb84a2f6fd141 23.12.2013 20:45 # +1
Мне больше нравится вариант, когда все что можно делается на высокоуровневом языке вроде питона, а на сях пишутся только расширения для того, что этот высокоуровневый язык не осилил (вроде производительности в узких местах). Почти всю работу с памятью можно будет спихнуть на высокоуровневый язык. Хотя я этот вариант и не проверял.
TarasB 23.12.2013 21:21 # 0
inkanus-gray 23.12.2013 21:24 # +3
kegdan 23.12.2013 21:43 # 0
inkanus-gray 23.12.2013 21:48 # +1
kegdan 23.12.2013 22:00 # 0
inkanus-gray 23.12.2013 22:13 # 0
bormand 23.12.2013 22:17 # 0
Может он и сложнее, но граблей в нем все-таки поменьше, да и писать на нем легче.
Хотя смотря что писать ;)
anonimb84a2f6fd141 23.12.2013 22:22 # 0
bormand 23.12.2013 22:23 # 0
Я о чистом Ц. Ц (не кресты!) как язык очень прост. Сложны приемы работы с ним и грабли.
anonimb84a2f6fd141 23.12.2013 22:28 # +1
bormand 23.12.2013 21:25 # +2
- Мелкие функции для высокоуровневых языков (которые на высоком уровне не получается запилить из-за скорости или нативности).
- Рантаймы этих самых языков (Ну не на асме же их писать в конце концов).
- Прошивки для контроллеров.
- Ядра операционок и драйвера к ним.
Хотя вот драйверы, имхо, уже пора переводить на что-то более высокоуровневое, т.к. сейчас они во-первых слишком всемогущи (могут делать абсолютно всё, а не только управлять своей железкой), а во-вторых слишком ответственны (могут наебнуть весь комп при малейшей ошибке). Singularity от M$ была интересным проектом, идущим в эту сторону, но ее вроде как забросили.
anonimb84a2f6fd141 23.12.2013 22:23 # 0
>т.к. сейчас они во-первых слишком всемогущи (могут делать абсолютно всё, а не только управлять своей железкой),
А зачем? Если хуйня случится - во-первых, ось уронят, во-вторых, отлаживать тяжелее.
bormand 23.12.2013 22:35 # 0
Да 99% прикладников даже с первым никогда не столкнутся ;)
> мы же о прикладных программах говорим, да
Нет ;) Ну иначе зачем бы я упоминал прошивки, дрова и т.п.
> Если хуйня случится - во-первых, ось уронят, во-вторых, отлаживать тяжелее.
Ну что поделать, вот так вот и мучаются. В основном, имхо, из-за производительности.
anonimb84a2f6fd141 24.12.2013 04:40 # 0
>Нет ;)
А я - да.
>В основном, имхо, из-за производительности.
А в чем этот прирост заключается, чтобы так жертвовать стабильностью?
bormand 24.12.2013 05:58 # 0
В том, что если сейчас сделать по процессу, крутящемуся в юзермоде, на драйвер (а сейчас других способов изоляции нет), то будет довольно дорогая передача данных между ними (сейчас драйверы практически напрямую, без переключения контекстов, общаются друг с другом и с железом).
LispGovno 23.12.2013 22:45 # 0
И не говори. Питухи. стоп ошибка 000000 кококо пришло время переустанавливать шиндовс.
Lure Of Chaos 23.12.2013 23:18 # +1
D не вкушали? вроде бы тот же С, но с человеческим лицом
kegdan 23.12.2013 23:29 # 0
Или очередная вариация на тему Си-с-классами?
Lure Of Chaos 23.12.2013 23:33 # +3
kegdan 23.12.2013 23:38 # 0
Lure Of Chaos 23.12.2013 23:42 # +2
Stertor 23.12.2013 23:44 # 0
inkanus-gray 23.12.2013 23:45 # 0
Можно просто погуглить Digital Mars или DMD/gdc/ldc.
Stertor 23.12.2013 23:48 # 0
А визуальный дизайнер форм есть у него? С визуальным дизайнером учить язык куда проще.
LispGovno 23.12.2013 23:49 # 0
kegdan 23.12.2013 23:47 # 0
inkanus-gray 23.12.2013 23:48 # 0
Lure Of Chaos 23.12.2013 23:51 # 0
пока вам угодно зависеть от .NET фреймворка, все хорошо.
kegdan 23.12.2013 23:53 # 0
Stertor 23.12.2013 23:56 # 0
Потому, что лучезарная фея в белом одеянии только что вероломно улыбнувшись вколола тебе аминазин а также на тебе висит смокинг аж на несколько десятков размеров больше.
anonimb84a2f6fd141 24.12.2013 04:37 # 0
Сишарп/жава же. Фреймверк - это не сторонняя зависимость, хотя для жавы по любому придется таскать с собой commons.
Lure Of Chaos 24.12.2013 07:32 # 0
govnomonad 24.12.2013 08:03 # 0
в kdevelop вроде есть плагин, в mono-develop видел
вроде ещё есть плагин в idea
Lure Of Chaos 24.12.2013 08:40 # +1
inkanus-gray 23.12.2013 23:36 # 0
anonimb84a2f6fd141 23.12.2013 23:30 # +3
Lure Of Chaos 23.12.2013 23:35 # 0
anonimb84a2f6fd141 24.12.2013 04:38 # 0
bormand 24.12.2013 06:12 # +1
Но в D есть GC :)
Lure Of Chaos 24.12.2013 07:28 # 0
kegdan 24.12.2013 09:33 # 0
roman-kashitsyn 24.12.2013 08:25 # 0
Go компилится в натив, в нём есть гц, нормальная стандартная библиотека, корутины и каналы из коробки.
Lure Of Chaos 24.12.2013 08:44 # 0
хм.
з.ы. давно хотел сказать, аватара напоминает собаку, что пытались пристрелить в фильмах "Нечто"
kegdan 24.12.2013 09:38 # 0
roman-kashitsyn 24.12.2013 09:43 # 0
Уж лучше, чем поделие тёмного разума александреску с неясными перспективами.
Go проектировали Томпсон и Пайк, а эти ребята знают толк в concurrency.
kegdan 24.12.2013 09:49 # 0
Енто ты про Design Patterns?
roman-kashitsyn 24.12.2013 09:54 # 0
kegdan 24.12.2013 09:57 # 0
Плюсы вообще не трогал и не собираюсь
inkanus-gray 31.12.2013 19:32 # 0
inkanus-gray 23.12.2013 23:44 # +2
kegdan 23.12.2013 23:49 # 0
Lure Of Chaos 23.12.2013 23:58 # 0
kegdan 24.12.2013 00:00 # 0
Lure Of Chaos 24.12.2013 00:03 # 0
kegdan 24.12.2013 00:07 # 0
bormand 24.12.2013 00:12 # +2
kegdan 24.12.2013 00:15 # 0
LispGovno 24.12.2013 00:20 # +2
bormand 24.12.2013 00:23 # 0
inkanus-gray 24.12.2013 00:24 # 0
А как разрешать конфликты?
bormand 24.12.2013 00:28 # 0
Параноики могут приписывать в конец метки ууид.
LispGovno 24.12.2013 00:21 # 0
bormand 24.12.2013 00:29 # 0
LispGovno 24.12.2013 00:30 # 0
bormand 24.12.2013 00:33 # 0
LispGovno 24.12.2013 01:13 # 0
bormand 24.12.2013 06:11 # +1
All GNU/Linux filesystems (including swap and LUKS headers of raw encrypted devices) support UUID. FAT and NTFS filesystems (fat and windows labels above) do not support UUID, but are still listed in /dev/disk/by-uuid with a shorter UID (unique identifier)
Запусти blkid, увидишь их.
Soul_re@ver 22.12.2013 12:04 # +2
Lure Of Chaos 22.12.2013 12:52 # +2
bormand 22.12.2013 13:04 # +4
Lure Of Chaos 22.12.2013 13:16 # +1
bormand 22.12.2013 16:29 # 0
Я вот сейчас как раз размышлял по этому поводу.
Допустим, я пишу класс, который упаковывает и шифрует несколько входных потоков в один выходной поток. В общем случае оба потока не умеют в перемотку. Поэтому я не могу ни замерить длину заранее, ни перемотать выходной поток и вписать ее в заголовок. Читать весь поток в память тоже не вариант, т.к. она не резиновая.
В мою дурную голову пришли три решения:
1) Писать длину не до блока данных, а после (аля trailer в gzip). Засада в том, как это потом распаковывать.
2) Юзать что-нибудь в духе HTTP'шного chunked encoding. Есть оверхед, но он контрится достаточно большим буфером.
3) Делать отдельный индексный файл, в котором лежат офсеты. Неудобство в лишнем файле.
Пока склоняюсь ко второму варианту, но может есть более разумные решения?
Lure Of Chaos 22.12.2013 16:39 # +1
anonimb84a2f6fd141 22.12.2013 23:35 # 0
Но зачем? Было бы неплохо, если бы нам си преподавали, но ручное управление памятью и коды возврата таки кал.
Stertor 23.12.2013 15:33 # 0
А Вы не боитесь, что студенты рассердятся и устроят Вам темную?
Stertor 23.12.2013 18:18 # −3
Кто явится завтра на зачет с непобритым лобком и попкой, тот получит кол!!
© Анальный учитель.
anonimb84a2f6fd141 23.12.2013 19:03 # −2
kegdan 23.12.2013 20:41 # +1
anonimb84a2f6fd141 23.12.2013 20:41 # +2
LispGovno 23.12.2013 23:50 # 0
anonimb84a2f6fd141 24.12.2013 04:39 # 0
kegdan 23.12.2013 20:41 # −2