Сохранен 62
https://2ch.hk/pr/res/904139.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Открываю двачерам свой open-source на Си

 Аноним 31/12/16 Суб 16:38:51 #1 №904139 
hwmonitor.jpeg
Предлагаю пресоедениться к разработке моего open-source проекта на Си под Linux - HWMonitor.

HWMonitor - консольная утилита наподобие htop,iotop, которая отслеживает активность различных узлов системы. На данный помент реализована система block device, network interface, memory statistics, cpu load. Утилита показывает активность в удобном для человека формате и подсвечивает интенсивность. Написана на языке С11, from scratch. Из сторонних либ использует только ncurses для отображения интерфейса. Так же используются утилиты lsblk и df, для получения данных о дисках планируется использование своих алгоритмов.
Вся программа пишется в одном файле по личным соображениям и религиозным взглядам автора.
Система сборки CMake, Make.

Ядро линукс на машине разработки - 4.8.
Компилятор GCC - 6.2.1. Так же возможна сборка под clang.
Версия libc - 2.24.

Если вы хотите поучавствовать в разработки и улучшении проекта, вам необходимо форкнуть его себе на гитхабе и создать pull request. Вы не должны использовать никаких сторонних библиотек, писать код только на Си под 11 стандарт, придерживаться стиля автора, не плодить велосипеды и максимально использовать существующий код проекта, который при необходимости можете модифицировать.

Проект выпускается под лицензией GPLv3.

Ссылка на проект: https://github.com/GregoryIstratov/HWMonitor
Аноним 31/12/16 Суб 22:34:47 #2 №904235 
>c++
>не фасм
>gpl3
>не wtfpl
ухади
sageАноним 31/12/16 Суб 22:56:02 #3 №904243 
>>904235
держите наркомана
Аноним 31/12/16 Суб 23:01:03 #4 №904245 
>весь прооект - один файл на 5к строк
Не надо так
Аноним 31/12/16 Суб 23:42:49 #5 №904255 
>>904235
Жопойчтец?
Аноним 31/12/16 Суб 23:45:57 #6 №904257 
>>904139 (OP)
>HWMonitor
М... Уже есть такая
Аноним 01/01/17 Вск 01:41:22 #7 №904268 
>>904139 (OP)
Форматирование кода ниоч. Нет единого стиля. Даже в одном определении функции в параметрах у одних указателей звёздочка прижата к типу, у других — к имени параметра.
Аноним 01/01/17 Вск 11:12:29 #8 №904309 
Бобра тебе, бро-байтоёбич.
Но почему не просто make?!
Аноним 01/01/17 Вск 12:56:34 #9 №904322 
> консольная утилита наподобие htop,iotop
В чем же ее преимущество перед оными для конечного пользователя?
Аноним OP 01/01/17 Вск 15:47:18 #10 №904354 
>>904245
>5к строк
Видел исходники sqlite? 200к строк, один файл.

>>904257
Ну название пока не проблема.

>>904268
Да, это IDE реформат сама делает. Щас перенстроил отформатировал как надо, заодно сделал небольшой рефакторинг.

>>904309
В проекте есть и Makefile. CMake использует моя IDE, к тому же, я уже достаточно привык к нему.

>>904322
Тут дело не в преимуществе, а ином формате представления данных пользователю. Например iotop показывает IO активность процессов, но не показывает на какое устройство, а у меня наоборот нету дерева процессов, зато есть список устройств на которых происходит активность.
К тому же проект открытый и пользователи сами могут сделать то чего им не хватает в других утилитах.
Аноним 01/01/17 Вск 22:43:54 #11 №904485 
>>904354
>Видел, древняя библиотека негров линчует
Это не оправдание.
Аноним 01/01/17 Вск 23:35:49 #12 №904499 
>>904139 (OP)
а ты няшный, дала бы тебе, хипстерок.
Аноним 01/01/17 Вск 23:52:41 #13 №904501 
>>904354
>Видел исходники sqlite? 200к строк, один файл.
Этот после амальгамации. Файл склеивается скриптом из кучи отдельных файлов.

> Щас перенстроил отформатировал как надо, заодно сделал небольшой рефакторинг.
За коммиты в +-2k строк нужно бить ебало.
Даже хуёвый стиль лучше таких вот коммитов.
Аноним 02/01/17 Пнд 00:19:28 #14 №904506 
>>904354
>Видел исходники sqlite? 200к строк, один файл.
https://github.com/mackyle/sqlite/tree/master/src
Ты наркоман?
Аноним 02/01/17 Пнд 00:51:09 #15 №904509 
>>904506
https://github.com/mackyle/sqlite#the-amalgamation

он думает, что sqlite3.c пишут руками
Аноним 02/01/17 Пнд 01:05:41 #16 №904514 
>>904139 (OP)
> Так же используются утилиты lsblk и df, для получения данных о дисках
Ты не осилил man proc ?
Аноним 02/01/17 Пнд 01:20:06 #17 №904518 
>>904139 (OP)
Ты не осилил скрытие кёрсора ?
sageАноним 02/01/17 Пнд 02:06:41 #18 №904524 
>>904139 (OP)
>поучавствовать
сажи безграмотному пердобыдлу
боюсь даже представить, что ты там "наразрабатывал"
Аноним 02/01/17 Пнд 08:31:53 #19 №904576 
>>904524
Сколько хуйтеров у успешных кодеров-то
Аноним 03/01/17 Втр 00:05:33 #20 №904886 
> zalloc
man calloc

> https://github.com/GregoryIstratov/HWMonitor/blob/PureC/main.c#L694
Ну да, зачем нам падать по out of memory, лучше упадем по stack overflow

> typedef u64 ret_t;
stdint.h

> list_traverse
man queue
google:utlist.h
Аноним 03/01/17 Втр 10:51:16 #21 №905009 
Пиздец блять, 5000 тысяч строк в одном файле. Ты вообще ебанутый?
Аноним 03/01/17 Втр 11:52:06 #22 №905017 
>>905009
А что не так? Для сишный программ это нормально.
Аноним 03/01/17 Втр 13:14:52 #23 №905065 
>>904886
>Ну да, зачем нам падать по out of memory, лучше упадем по stack overflow
А может оно просто не в настроении? Если долго просить, может быть, оно сдастся? А ты бы лучше не критиковал, а пример брал с человека - он-то девственности точно лишился.
Аноним 03/01/17 Втр 13:19:49 #24 №905068 
>>904139 (OP)
А фоточка твоя? дашь мне? :3
Аноним 03/01/17 Втр 21:30:49 #25 №905425 
>>905017
Толстишь, сука?
sageАноним 04/01/17 Срд 02:13:56 #26 №905573 
1340687742930.gif
>>904139 (OP)
> hwmonitor
> brand new utilities
Им сказали что они ОПОЗДАЛИ?
http://www.cpuid.com/softwares/hwmonitor.html
Аноним 04/01/17 Срд 02:27:46 #27 №905589 
>>904139 (OP)
Конечно хорошая идея, тока как в 5к строчек разобраться. Ты же сам хуй шо там найдешь через 3 месяца
Аноним 05/01/17 Чтв 17:48:26 #28 №906529 
>>904501
>>904506
>>904509
Ладно я угарнул просто. 5к строк для си проги ничего особенного, бывают исходники намного больше.

>>904886
>calloc
zalloc - обертка над аллокаторами, сделанная для отладки и возможного управления памятью.

>Ну да, зачем нам падать по out of memory, лучше упадем по stack overflow
Вообще там предпологался счетчик попыток, но руки не дошли.

>stdint.h
>typedef uint64_t u64;

>man queue
>google:utlist.h
Очень надо, юзать не свои структуры данных...

>>905573
Ничего что это для винды, умник?

>>905589
Возможно анон и прав. Возможно для открытого проекта действительно будет лучше разделения кода по мелким файлам для удобства коммитов.
Но опять же 5к строк не много, для небольшой программы.
Аноним 05/01/17 Чтв 23:06:44 #29 №906818 
>>906529
> Очень надо, юзать не свои структуры данных...
Действительно, зачем юзать стандартные библиотечные функции, когда можно написать СВОИ.

> Вообще там предпологался счетчик попыток, но руки не дошли.
Ты вообще понимаешь хоть, в каких случаях malloc возвращает NULL и что это значит?
Аноним OP 06/01/17 Птн 10:55:05 #30 №907019 
>>906818
>utlist.h
>стандартные библиотечные функции

>вообще
>понимаешь
>хоть
Я да, а ты? Знаешь как работает память в компьютере?
sageАноним 06/01/17 Птн 11:16:54 #31 №907027 
лол, всегда догадывался что байтоебы ебанутые.
Аноним 06/01/17 Птн 12:26:39 #32 №907048 
>>907019
Ну давай, расскажи мне, что такого должно произойти в языке без гц, чтобы если ты не смог выделать память один раз, то смог бы сделать это с третьеё/пятой/етц попытки, не предпринимая никаких дополнительных действий.
мимо
sageАноним 06/01/17 Птн 12:44:46 #33 №907054 
>>907048
Язык тут не причем, ось тебе память выдает, а не язык.
Аноним 06/01/17 Птн 13:10:12 #34 №907061 
>>907054
Ты же пошутил сейчас?
Аноним 06/01/17 Птн 13:17:57 #35 №907065 
>>904139 (OP)
Давай тоже тебя покритикую.
>animation_bug
Плохо сделал. Мало того, что в рантайме производишь инициализацию 48 переменных, так ещё и флаг инициализации, а это не нужно. Если уж хочешь так сделать, инициализируй как статический константный массив.
static const char movie[ ] =
{
    "str1",
"str2",
...
};
>if (frame >= 47)
if (frame >= sizeof(movie))
Ну и далее.
Хотя лучше сделать циклом. Количество подчёркиваний до, количество после и сама строка. Ничего сложного нет.
>>906529
>zalloc - обертка над аллокаторами, сделанная для отладки и возможного управления памятью.
Но зачем? Ты собираешься управлять памятью сам? Нет? Не городи лишнего. И согласен с аноном, что лучше возвращать нулевой указатель, так программа сразу упадёт после первой же попытки использования нулевого указателя, а не где-то далеко наверху.
И вопрос - а зачем u64 для памяти? Ты планируешь выделять более 4 Гб?
>5к строк для си проги ничего особенного, бывают исходники намного больше
Не знаю, что за IDE, но мне уже не удобно, когда более 500 строк в файле.
>static FILE
stdlog = NULL;
> = NULL
Но зачем?
>static inline void
Но зачем ещё и inline? Оптимизатор и без тебя додумается её заинлайнить. Или проигнорирует, даже если укажешь.
Аноним 06/01/17 Птн 13:21:20 #36 №907067 
>>904139 (OP)
Давай тоже тебя покритикую.
>animation_bug
Плохо сделал. Мало того, что в рантайме производишь инициализацию 48 переменных, так ещё и флаг инициализации, а это не нужно. Если уж хочешь так сделать, инициализируй как статический константный массив.
static const char⚹ movie[ ] =
{
"str1",
"str2",
...
};
>if (frame >= 47)
if (frame >= sizeof(movie))
Ну и далее.
Хотя лучше сделать циклом. Количество подчёркиваний до, количество после и сама строка. Ничего сложного нет.
>>906529
>zalloc - обертка над аллокаторами, сделанная для отладки и возможного управления памятью.
Но зачем? Ты собираешься управлять памятью сам? Нет? Не городи лишнего. И согласен с аноном, что лучше возвращать нулевой указатель, так программа сразу упадёт после первой же попытки использования нулевого указателя, а не где-то далеко наверху.
И вопрос - а зачем u64 для памяти? Ты планируешь выделять более 4 Гб?
>5к строк для си проги ничего особенного, бывают исходники намного больше
Не знаю, что за IDE, но мне уже не удобно, когда более 500 строк в файле.
>static FILE⚹ stdlog = NULL;
> = NULL
Но зачем?
>static inline void
Но зачем ещё и inline? Оптимизатор и без тебя додумается её заинлайнить. Или проигнорирует, даже если укажешь.

Fix
sageАноним 06/01/17 Птн 14:55:50 #37 №907108 
>>907061
Virtual Memory. Google it.
sageАноним 06/01/17 Птн 14:58:03 #38 №907109 
>>907067
>> = NULL
>Но зачем?
Все правильно, все переменные надо инициализировать при объявлении.
Аноним 06/01/17 Птн 15:39:59 #39 №907115 
>>907109
>все переменные надо инициализировать при объявлении
Наверное, ты не заметил объявления переменной:
>static FILE⚹ stdlog = NULL;
Так зачем static переменную занулять, если она и так зануляется при запуске программы?
Аноним 06/01/17 Птн 15:40:57 #40 №907117 
>>907115
>static
И глобальные не static сюда же, т.к. они тоже зануляются.
sageАноним 06/01/17 Птн 16:11:14 #41 №907138 
>>907117
Давай, диванный, не кукарекай, а неси пруфы.
Аноним 06/01/17 Птн 17:01:57 #42 №907162 
>>907108
Я не буду за тебя гуглить. Вообще, я подумал немного и понял, что такое может, конечно, быть, но ты всё равно хуйню написал, ибо без приостановки программы минут эдак на 10 нет смысла даже пытаться переаллоцировать. Да там вообще нет смысла пытаться что-то делать, потому что системе на этот момент уже очень давно очень плохо. И это при условии, что сишный маллок при недостатке памяти пытается аллоцировать новый хип. Если нет, то всё ещё веселее.
Аноним 06/01/17 Птн 17:34:45 #43 №907194 
>>907138
#include <stdio.h>
int g_s[20];
void main(void)
{
    static int l_s[20];
int i;

for (i = 0; i < sizeof(l_s) / sizeof(int); i++)
{
printf("%i ", l_s[ i ];
}


for (i = 0; i < sizeof(g_s) / sizeof(int); i++)
{
printf("%i ", g_s[ i ];
}
}

Попробуй этот пример.
Аноним 06/01/17 Птн 18:14:36 #44 №907214 
>>904139 (OP)
Ох, ты вернул 2007, когда каждый школьник считал своим долгом напесать свой монитор загрузки.
А так, вот нахой ты это делаешь? Деды не зря продвигали KISS, а ты набучиваешь всё вместе, неадекват. Если пользователю надо вывести вывести сразу несколько наборов данных, то он откроет несколько окон, и сраный тайловый менеджер всё это слепит вместе.
sageАноним 06/01/17 Птн 18:34:25 #45 №907223 
>>907194
Что это за высер? Номер параграфа в стандарте сишки, где сказано, что неинициализированные переменные гарантируются "быть нулями" неси.
Аноним 06/01/17 Птн 18:46:43 #46 №907226 
>>907223
Все знают, что глобальные и static инициазилируются нулём.
Аноним 06/01/17 Птн 18:55:20 #47 №907229 
>>907226
>Все знают
Как оказалось, не все.
Аноним 06/01/17 Птн 19:51:35 #48 №907267 
>>907223
Стандарт c99 - 6.7.8 пункт 10.
Стандарт c11 - 6.7.9 пункт 10.
Аноним OP 06/01/17 Птн 20:58:34 #49 №907316 
>>907048
Память может освободиться представляешь? Конечно стоило туда дописать еще делей пару мс.
А может и стоит падать если NULL, конечно тут вопрос филосовский. На самом деле на десктопе достаточно сложно NULL получить.

>>907065
>animation_bug
>Плохо сделал
Да сделал, как сделал. Конечно замечания дельные, но эта функция что-то типа прикола и помощи в тесте на малых значениях семплинга.

>zalloc
>Но зачем? Ты собираешься управлять памятью сам? Нет? Не городи лишнего.
Пример гибкого проектирования. Вдруг я захочу сделать управляемую память, что мне потом во всем коде искать малоки и заменять их?

>И вопрос - а зачем u64 для памяти? Ты планируешь выделять более 4 Гб?

Во-первых на х86_64 битной архитектуре, size_t имеет размер в 64 бита, а программа заточена именно под эту архитектуру. Во-вторых, на этой архитектуре регистры процессора 64 битные конечно есть и 32 битные, что позволяет оперировать данными, грубо говоря, за 1 цикл процессора на самом деле на современных суперскалярных процессорах с множеством вычислительных конвееров и механизмом предсказаний ветвления среднее время на инструкцию может быть гораздо ниже. + оптимизирующий компилятор лучше оптимизирует такой код.

>Не знаю, что за IDE, но мне уже не удобно, когда более 500 строк в файле.
Видимо ты в проде никогда не работал еще. Я уже 10 лет на плюсах пишу и не такое видал.

>static FILE stdlog = NULL;
> = NULL
>Но зачем?

Просто привычка и для лучшей читабельности кода.

>static inline void
>Но зачем ещё и inline? Оптимизатор и без тебя додумается её заинлайнить. Или проигнорирует, даже если укажешь.

А вот и не всегда. Оптимизатор может вообще ее не заинлайнить например если она будет объявлена extern, так же если она будет объявленна в заголовочном файле и реализована в другом месте кстати во многом из-за возможности большей оптимизации мной была выбранна такая архитектура кода в один файл..
Дело в том что ключевое слово static вкупе с inline дает компилятору понять что функция будет отдельной копией для каждого юнита трансляции которую желательно заинлайнить.

>>907214
>KISS
>ДЕДЫ
>ПАРАДИГМЫ
>ПРИНЦИПЫ
>КОКОКО
Делать мне нехуй вот и пишу всякие "бесполезные" проги.
Аноним 06/01/17 Птн 23:34:40 #50 №907409 
>>907117
BSS блок зануляется в винде, в дебаге, а в целом - Implementation defined.
Аноним 07/01/17 Суб 07:36:48 #51 №907544 
>>907409
>а в целом - Implementation defined.
Лол, нет.
Аноним 07/01/17 Суб 09:14:24 #52 №907550 
>>907316
>Вдруг я захочу сделать управляемую память, что мне потом во всем коде искать малоки и заменять их
Вот именно, что если захочешь. Заменить malloc можно будет через дефайн. Не нужно усложнять программу без необходимости. Это как C++, когда делают абстрактный класс, а от него только один класс наследуют. Вот зачем так? Не лучше ли сразу же один класс сделать без виртуальных функций? Ведь в таком случае нужно будет делать в 2 раза больше работы по поддержке двух интерфейсов. Вроде бы этот пример был в книге "Совершенный код".
>Я уже 10 лет на плюсах пишу и не такое видал.
Но это же не хорошо так делать, ты же сам пишешь. Твоё дело.
>Оптимизатор может вообще ее не заинлайнить
Ты проверял? Мне иногда интересно, что оптимизатор наоптимизировал. Сам под виндой, IDE VisualStudio2005, подозреваю, что у GCC или Clang оптимизация получше будет. Так вот - чистый C оптимизируется просто замечательно. Настолько замечательно, что callback может быть заинлайнен через 3 функции. Все функции в одну-две строчки, даже если они глобальные (не экспортируемые), оптимизатор подставляет по месту вызова. Случаются и некоторые странности - оптимизатор может заинлайнить вызов функции в одном месте, но вызывать её в другом. Но это уже функция в десяток строк и более. А как оптимизатор обфусцирует код - потом и не разберёшь, как изначально в исходнике было.
>ключевое слово static вкупе с inline
А без inline, значит, не даёт понять?
>>907409
>BSS блок
Что за BSS блок? Ты, давай, не ругайся. Все неинициализированные переменные размещаются в секции неинициализированных данных. Эта секция отсутствует в файле, там указывается только размер и адрес. При загрузке файла под эту секцию выделяется необходимый размер памяти. Вот он то и забит нулями. Точнее, память выделяется уже очищенная от предыдущих данных.
Аноним 07/01/17 Суб 09:37:00 #53 №907552 
>>907550
Да не пофиг ли как оно реализовано? Секция-хуекция... кстати, сегмент, а не секция, если говорить об ELF В стандарте русским по белому написано что зануляются.
Аноним 07/01/17 Суб 20:42:28 #54 №907826 
>>907550
BSS - это и есть область неинициализированных данных, тип которых позволяет их записывать как ключ-значение. https://mcuoneclipse.com/2013/04/14/text-data-and-bss-code-and-data-size-explained/

Вообще мне всегда казалось, что то что static по умолчанию null - справедливо для всех областей видимости кроме глобальной, в глобальной же статик управляется настройками компилятора, в частности для nullable: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html см. -fno-zero-initialized-in-bss

Пункты же 6.8.х относятся ко вложенным областям видимости.
Аноним 07/01/17 Суб 20:58:11 #55 №907831 
>>907826
>Пункты же 6.8.х относятся ко вложенным областям видимости.
С чего ты это взял, довн?
Аноним 07/01/17 Суб 21:12:05 #56 №907846 
>>907267
Спасибо. Обосрался, признаю.
Но я по прeжнему настаиваю, что стоит всегда и везде использовать explicit initialization. Это хорошая практика.
Дефолтный инишиалайзер для юнионов, например, ведет себя не так, как я бы ожидал.
Ну и это больше маняврирование в наше время, но NULL не обязан быть 0.
Аноним 07/01/17 Суб 21:18:11 #57 №907850 
> An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.⁶⁶
> 66) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.19.

>>907846
>Ну и это больше маняврирование в наше время, но NULL не обязан быть 0.
Что ещё расскажешь?
Аноним 07/01/17 Суб 21:23:17 #58 №907851 
>>907846
>но NULL не обязан быть 0.
Ну хотя ты прав. Он ещё может быть ((void*)0)
Аноним 07/01/17 Суб 21:41:25 #59 №907875 
>>907851
Сука и правда. Откуда тогда у меня в голове столько дерьма? Я где-то прочел/кто-то мне сказал, что NULL это специальный адрес памяти, обращение к которой обязано вызвать КРОВЬКИШКИРАСПИДАРАСИЛО. И быть 0 это значение не обязано.

Вот и пизди после этого с апломбом. Все, блять надо перепроверять самому, никому верить нельзя.
Аноним 07/01/17 Суб 21:51:18 #60 №907886 
>>907831
Тебе не нужно, в проектах laba1 и cursach это вряд ли понадобится.
Аноним 08/01/17 Вск 03:42:13 #61 №908055 
>>907875
NULL это null pointer constant и она может быть 0 либо ((void*)0).
null pointer, т.е. результат присвоения null pointer constant указателю, таки да, не обязан в своём битовом представлении иметь все биты = 0.
Аноним 08/01/17 Вск 03:43:04 #62 №908056 
>>907886
Вернись в свой php-тред и клоуничай там.
comments powered by Disqus