Это копия, сохраненная 24 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, пользуйтесь https://ideone.com/ https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2479.pdf (февраль, с диффами)
- Последний черновик ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2583.pdf (октябрь)
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Что еще почитать:
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
https://github.com/kozross/awesome-c
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №62: https://arhivach.net/thread/616070/
- №63: https://arhivach.net/thread/623165/
- №64: https://arhivach.net/thread/623166/ >>1830513 (OP)
По С++ тред рядом в /pr/, воспользуйся поиском. Языки разные.
Проще, компактнее, меньше рантайм, меньше оверхеда (да-да, даже vtable это индирект колл) больше охват девайсов.
А вот почему C, а не Zig
Сложнее, громоздко, больше рантайм и оверхед.
Но как без классов и объектов? Массивы передавать? А без оверрайдов и интерфейсов? Без дженериков?
>меньше оверхеда (да-да, даже vtable это индирект колл)
Платишь за то, что используешь.
Переизобретённое ООП в рамках С со структурой c указателями на функции — это тоже индирект колл.
Факты, которые ты привёл, верны. Но твой аргумент — invalid.
А почему его тут нет?
> ты сам выдумываешь плюсовый сахар вместо того чтоб взять готовый
С плюсовым сахаром принято тащить кучу говна. Например, шаблоны. Например, исключения.
Насколько я понимаю, в с++ ты все же платишь больше, чем используешь, а иногда используешь лишнего.
Я бы попросил привести пример, но тред не про это, так что не надо.
>Например, шаблоны
Которые позволяют в компайл тайме в миллиард раз больше того что может сраный препроцессор ссей и всё это с проверкой типов вместо ссяшной стрельбы из пулемета по ногам копипастой и мисюзом.
Если объяснять на пальцах, то ты в браузере читаешь текст выводимый через C-либу freetype и смотришь картинки через C-либы libpng, jpeg и так далее.
Кстати, да, не понял его предьявы к темплейтам.
С эксепшенами ещё могу понять, сам отключал в некоторых проектах.
Шизанутый, сколько всего разного может "пользоваться" сишными библиотеками? Сколько всего может использовать сишные библиотеки? А сипипишные, а? То то же.
А ты, наверное, обычный js-тролль, который тааааак любит БААААЛШЫЫЫЕ СЫСТЕЕЕМЫ на js, да ведь, толерантный хипстерочек?
Ну тут ты немного не прав, многие С++ либы иногда могут иметь Сишный апи через extern "C" и описание функций, которые дёргают методы из классов.
Впрочем, у всех языков ffi обычно ассоциируется с вызовом именно сишных функций.
Так, наверно, исторически сложилось, или из-за совместимости, или из-за линух-пердоль. Почему, кстати, они пишут на С?
>>53179
Нет, но я вправду не имел дел с С/C++, поэтому пытаюсь понять. Суть не в том, чтобы система была большой, а чтобы программисту было удобнее и эффективнее работать. А железо уже давно слишком быстрое, чтобы разница в производительности была заметной.
Чтобы избежать лишних прослоек.
Системщики - вообще страшные люди, крайне любят низкоуровневое программирование, байтоёбство и прочие вещи, которые всякие фронтэндеры считают ненужными и излишними.
А Си тебе как раз дает относительно низкий уровень абстракции и, вместе с тем, крайне широкие возможности по твику и решению тех или иных прикладных задач.
Я сам крайне охуел, когда у меня получилось на сях реализовать прогу для восстановления фотографий из RawData и парочку простейших фильтров для джипега. При этом, не было мест, в которых бы у меня был глобальный затык из-за непонимания парадигмы языка. Да-да, я тоже прошёл CS50.
Пойми один простой вещь.
Когда ты пишешь на Питоне - помни, что под каждой твоей строчкой крутится полсотни строчек сишного кода.
Да и не только на Питоне, лол.
А ведь чем ниже уровень - тем меньше вероятность глобально накосячить.
>А ведь чем ниже уровень - тем меньше вероятность глобально накосячить
Наоборот: чем выше уровень, тем эффективнее и лучше отлажен код уровнем ниже. А сколько там строк для меня значения не имеет.
Скажи, а оно мне надо?
Вот если у меня задача получать данные по спиайю каждые 100 микросекунд, брать бпф и выдавать спектр в уарт НАХУЯ МНЕ НУЖЕН ЭТОТ САХАР? чтоб больше запутаться?
>>53140
С для того где его хватает, частоты не важны.
>>53173
>не понял его предьявы к темплейтам.
Они не нужны, если у тебя маленький деревянный код, они только будут мешать чтению.
Там, где они не нужны — они не нужны. Кто ж поспорит. Но в других местах нужны.
Да, кстати. Спасибо, что поправил. Могут иметь и сишный интерфейс.
Ну, я как раз и про "привязку" ffi к C и имел ввиду.
Классы это структуры. Си с классами это Си, а не кресты.
А вот кресты это STL, эти аллокаторы, енумераторы и прочие говнокаторы, и джаваскрипт-однострочная дрисня с вложенными функциями. Короче любое говноскриптовое говно - черный ящик, которое хуй пойми как работает и в глазах программиста никак не соотносится к реальному коду - ассемблеру.
> Которые позволяют в компайл тайме в миллиард раз больше
Да. Только что-то сложное практически невозможно прочитать. Да, как и сложные макросы в Си. Но лучше от этого шаблоны не становятся.
Что-то я орнул. Далеко не всегда.
Если так идти выше по абстракции - зачем вообще кодить?
Устраивайся менеджером и колошмать мозги подчиненным разработчиком: у них-то будет все лучше отлажено, чем у тебя.
>. Например, исключения.
Отключаются опциями компилятора.
При этом классы останутся доступны, а STL отвалится.
Да все оно читается замечательно. А если программа большая и сложная так вообще намного лучше чем 500 функций под каждый принимаемый тип с именем этого типа в имени.
МайКласс1sumМайКласс2()
А вот в маленьких программах где все прибито гвоздями и точно известно что и куда ты передаешь это действительно усложняет чтение.
>>53638
Хранить глобально ничего никуда не передавать.
Привет эмбеддед.
>>53640
И толку с таких крестов? Выше писали С с классами это не кресты.
Затем, что чем выше по абстракции, тем сложнее, то есть обладающий большим набором признаков и свойств результат. А чем этот набор больше, тем выше шанс, что он уникален и меньше тебя удовлетворяет.
Ты же на машинном коде все не пишешь?
>Затем, что чем выше по абстракции, тем сложнее, то есть обладающий большим набором признаков и свойств результат. А чем этот набор больше, тем выше шанс, что он уникален и меньше тебя удовлетворяет.
Охуеть, кто-то ещё кроме меня с интеллектом итт
> И толку с таких крестов? Выше писали С с классами это не кресты.
У меня друг работал в геймдеве, писали игры для телефонов на крестах. И во всех проектах по дефолту прям были выключены исключения и rtti. Использовалась своя stl. Так что - такие кресты нужны. То что ты юзекейса не нашел - не означает что другие не найдут.
Это не мой код, это мерзкий openssl, с которым приходится работать. Хотел сказать — посмотреть, какая помойка.
>Хотел сказать — посмотреть, какая помойка.
Просто ты никогда не видел такого и возбудился.
Но при этом то же самое на С++ выглядело бы красивше.
>Просто ты никогда не видел такого и возбудился.
Видел конечно, но обычно мимо проходил, а тут вникать пришлось.
>Но при этом то же самое на С++ выглядело бы красивше.
Об этом и говорю.
Но так-то и на С было бы красивше чем то, что есть, если бы писали не так монолитно КАК ДАУНЫ БЛЯДЬ.
Так его вроде математики, а не программисты писали.
По крайней мере слышал такое объяснение, когда Heartbleed в нем нашли
Код пишет человек, а не язык.
Чем больше свободы в языке, тем более уебищный код можно написать. но это если программист рукожоп, а если программист грамотен, то и код будет тем лучше, чем больше у него возможностей.
Говоря просто, крутой язык (си) отражает способности программитста. Какой ты - такой твой код. Свобода означает безграничные возможности, но в то же время накладывает абсолютную ответственность. За свои действия отвечаешь только ты, полностью, никаких нянек вроде языка с анальными ограничениями и принуждениями тут нет, так что свои косяки свалить не на кого и за тебя красивый код никто не напишет и не направит "как надо". На си пишут только настоящие программисты, которые сами за себя отвечают и сами знают как им надо, а не ищут нянек, которые помогут и направят тупое дитятко на "правильный путь".
скажите, я вот себе поставил линукс и проебался: не работают дрова вай фая и нет возможности подрубить кабель
начал вручную скачивать на одном компе дрова и их зависимости всякие, но в итоге ебусь уже день с тем, что одно трубует другое, а оно еще другое и еще и еще - короче пиздец
вопрос по теме: одна из вот этих нужны хуевин - gcc, но у него вереница блять зависимостей
где можно найти архив с уже всеми укомплектованными .deb файлами?
Да, и это видно прямо по коду.
На офсайте
АААА МОИ ГЛАЗААА
Ну очевидно же - что-то делаешь не так.
Может где-то не используешь нужную константу с указанием типа, или где-то в коде не то написано.
> Почему в строке 7 мы приводим полученные войдовые указатели к типу "указатель на указатель на char", а потом разыменовываем?
Потому что qsort передает в компаратор указатели на элементы массива. Выходит в функции будут char ×× переданы, но реальный тип void ×, его надо привести к char ×× чтобы после разыменования указателя был тип char × который требуется функции strcmp.
> Почему не просто приводим к указателю на char?
А ещё разыменовать void × нельзя, так как неизвестен размер типа void.
> Также непонятна строка 14 ну и следовательно 15. Почему в качестве размера массива мы передаем именно такую константу?
sizeof возвращает размер типа.
`sizeof a` вернёт размер в байтах всего массива(20 байт или 40 байт), sizeof (char ×) вернёт 4-8 байт(зависит от размера указателя).
Спасибо, разобрался.
> очевидно, но я не понимаю в чем проблема.
Вот я тоже не понимаю, не вижу потому что код запутанный, полон неявных приведений int к float, перемножения и деления float на int. Плюс ко всему код плохо структурирован и его читать проблематично. В цикле у тебя вообще делится целое число 1 на целочисленную переменную i, если i не ноль(а оно не ноль судя по коду), то результат такой операции всегда 0 будет. И так далее. Просто запутанный и проблемный код.
> И почему глаза болят?
Код структурирован без какой-либо на то логики и формальных правил.
Нет. И в плюсах нет.
Таки да. Есть вариант, с `i == 1`.
>>54583
Красиво и четко.
Эпсилон считать можно и не через pow.
Расписать формулу для члена ряда нормально.
Записать ее с использованием float литералов, и функций явно принимающих float(а может и double тебе нужен).
Структурировать код надо так, чтобы читать было проще, а не выглядел он как ебучая картина Пикассо.
По мере того как начало правильно считать и работать - вносить все ифы и прочее с ограничениями.
>>54589
Кажется ты читаешь мои мысли, ахаха.
вангую у тебя z всегда больше e и всё время растёт, поэтому цикл никогда не завершается
тебе надо не z с e сравнивать, а разницу между новым z и и предыдущим
> Сканф_С???!!
scanf_s это безопасная функция scanf, предоставляемая шиндошсом. Под шиндошс с ней норм.
> пикрилы, программа просто останавливает свое выполнение после ввода переменной, в чем здесь проблема?
Отладочные принтфы запретили?
Ну и да, вся матх.хэ расчитана на даблы, все функции работают только с даблами
float - онли для гейдева, что бы графон в 144 фпс и физон в нем же считать.
Используй даблы.
typedef enum{
MOCHA,
PIDOR,
BLYADINA,
HUI
} State;
State s = HUI;
bool isFinished = false;
while(!isFinished){
switch(s){
case HUI:
...
case MOCHA:
...
break;
case PIDOR:
...
break;
case BLYADINA:
...
s = PIDOR;
break;
default:
}
}
typedef enum{
MOCHA,
PIDOR,
BLYADINA,
HUI
} State;
State s = HUI;
bool isFinished = false;
while(!isFinished){
switch(s){
case HUI:
...
case MOCHA:
...
break;
case PIDOR:
...
break;
case BLYADINA:
...
s = PIDOR;
break;
default:
}
}
>Даже не смешно. Ты попробуй реальный сложный автомат запилить.
То же самое, только
State s = HUI;
bool isFinished = false;
while(!isFinished){
switch(s){
case HUI:
s = processHui();
break;
case MOCHA:
s = processMocha();
break;
case PIDOR:
s = processPidor();
break;
case BLYADINA:
s = processBlyadina();
break;
default:
printf("DA TY OHUEL SUKA");
isFinished = true;
}
}
Да я уже видел что ты знаешь как работает оператор switch.
Ты хотя бы препроцессор для Си напиши беp goto.
>где можно найти архив с уже всеми укомплектованными .deb файлами?
Какой линукс ты себе поставил?
В убунте apt тебе автоматически все зависимости вытянет, как и любой пакетный менеджер.
>scanf_s это безопасная функция scanf, предоставляемая шиндошсом.
Верно, но пользоваться ей не нужно.
Эти виндофункции _s оказались ошибкой.
>Нет там пиздеца.
Вообще то есть адовое дублирование кода.
A
B
if(cond)
{
do {
C
A
B
}while(cond)
}
повтори еще раз, непонятно же, заебешь
Которая принимает сколько аргументов? а сколько ты передаёшь?
>Под шиндошс с ней норм.
Но зачем?
>>54910
>Отладочные принтфы запретили?
Пиздец деграданты.
>>1855450
>Нахуй нужно, линукс даже на кофеварках.
Ну удачи, лол, особенно посмотрю на тебя в ЦОС с линуксом.
ты просто не понимаешь в чём разница между микроконтроллером и микропроцессором и области применения
>>1855538
>все подобные штуки будут писаться на си под rtos.
Ртос это и есть линукс(в 80% случаев) , пилится всё на бареметал.
>>1855832
Чтоб в фейсбук зайти.
А если серьёзно - проще поставить МК чем ебаться с логикой на транзисторах
>>1855841
классика маркетологов, а иван ерохин производит готовый продукт где ничего не надо качать и управлть с телефона, а где есть 4 кнопки, никаких головняков.
> последняя строка
Два кофе этому господину.
Есть, короче, кофе машины. На них 2-3 кнопки - эспрессо, средний и большой американо. ВИСЬО. Хочешь капучино? Сбоку есть капучинатор: трубка мокается в стакан с молоком, нажимается еще одна кнопка, выплевывается теплая молочная пена.
И никаких скриптов.
> Которая принимает сколько аргументов? а сколько ты передаёшь?
> Но зачем?
Давай посмотрим сюда:
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l
>These versions of scanf, _scanf_l, wscanf, _wscanf_l have security enhancements, as described in Security Features in the CRT
Ага, идём дальше:
https://docs.microsoft.com/en-us/cpp/c-runtime-library/security-features-in-the-crt
Ну тут и все становится на свои места, просто детект ошибок и адекватный вывод их, чтобы кто-то юзающий функции не выстрелил себе в ногу. Вполне полезно, особенно для бедного студента который лабу пишет
Ок, используй.
>чтобы кто-то юзающий функции не выстрелил себе в ногу
Чтоб не выстрелить себе в ногу, надо не стрелять себе в ногу.
Заебали уже прохрамисты которые пишут так что оно может "выстрелить себе в ногу", пиши так чтоб оно не стреляло себе в ногу.
а выстрелить себе всё равно проблем не составит
>особенно для бедного студента который лабу пишет
Вот как раз студентики то пускай себе ногу и отстреливают, у них и время на это есть и на проде не упадет, того гляди поотстреливают себе ноги пока молоды так потом как вырастут этого делать не будут.
> Ок, используй.
У меня нет винды. Я лишь поясняю что это за функции у МС имеются в наличии.
> >чтобы кто-то юзающий функции не выстрелил себе в ногу
> Чтоб не выстрелить себе в ногу, надо не стрелять себе в ногу.
"Если ты бездомный, просто купи дом"
> Заебали уже прохрамисты которые пишут так что оно может "выстрелить себе в ногу", пиши так чтоб оно не стреляло себе в ногу.
"Да вот возьми и купи дом. Нет денег? Заработай!"
> а выстрелить себе всё равно проблем не составит
"А быть бездомным может каждый, на это много ума не надо"
Примерно так твоя аргументация выглядит
> >особенно для бедного студента который лабу пишет
> Вот как раз студентики то пускай себе ногу и отстреливают, у них и время на это есть и на проде не упадет, того гляди поотстреливают себе ноги пока молоды так потом как вырастут этого делать не будут.
Дык они и отстреливают. Попадают потом на работу/стажировку, и там уже в твоих проектах стреляют в ногу. Пусть на примере этих функций узнают об возможностях пострелять в ноги, и может поинтересуются как эти проблемы обошли.
Но не нашёл там про оператор ",". Впервые увидел его применение в декомпилированном коде от IDA
У меня русская версия. Хз, наверно, пропустил.
Один из лучших подходов сишечки это парадигма "оно то есть но если оно плохое то мы его не используем"
Вот это из разряда функций которые использовать просто не надо.
Так же как и цикл "Ду вайл"(кроме определенных случаев где он действительно уместен)
А при чем тут бездомные. Ты не можешь писать код предварительно подумав что и где он делает? Или тебе надо чтоб тебя ограничивали и говорили что так нельзя?
Так и появляются говносишники которые перешли из какой-то джавы с тотальным анальным контролем которые пишут говно из-за того что коданалищатор их не стукает по ручкам.
Как-то хреново отстреливают если не помогает.
Я как-то во время обучения настрелял достаточно чтоб трижды подумать над каждой строчкой
> Один из лучших подходов сишечки это парадигма "оно то есть но если оно плохое то мы его не используем"
Тогда почему не удаляют?
> Вот это из разряда функций которые использовать просто не надо.
И почему же? _s ничем тебя особо не обязывает, а при наличии ошибок в коде - тебе может подсказать что ты сделал не так сам компилятор или crt выведет что-то.
> Так же как и цикл "Ду вайл"(кроме определенных случаев где он действительно уместен)
Ясно, у тебя все нинужно, если ты этому не можешь найти применение.
> А при чем тут бездомные. Ты не можешь писать код предварительно подумав что и где он делает? Или тебе надо чтоб тебя ограничивали и говорили что так нельзя?
Аргументация у тебя уровня дебила.
Я так понимаю, ты с большими проектами на Си не работал и большой командой? Все писал своими потными ручками, чисто свой код и из-за этого у тебя выработалась мания величия? Когда половина кода написана не тобой, и он весьма большой по объему - анализаторы вполне могут сократить время разработки приложения, банально предупредив о какой-то возможности наколоться. Нет, конечно, можно пойти в код, глянуть что за таинственная функция написанная каким-то давно уволившимся сотрудником, изучить как она работает, как тянет ворох других ваших функций, потратить денёк на дебаг, а можно просто увидеть выхлоп анализатора или warning компилятора и исправить сходу свой код на правильный вариант.
> Так и появляются говносишники которые перешли из какой-то джавы с тотальным анальным контролем которые пишут говно из-за того что коданалищатор их не стукает по ручкам.
Смешно, но знаю тонну джавистов которые сбежали от С/С++(причем работали в этой области от 10 лет) просто потому что их достало ебаться с памятью
> Я как-то во время обучения настрелял достаточно чтоб трижды подумать над каждой строчкой
И наверное пишешь 10 строчек в месяц, мня о том какой ты ниибацца охуенный погромист.
>Тогда почему не удаляют?
По тому что кто-то это уже использовал.
>И почему же?
А делать "как все" нельзя? Надо изебнуться? чего тебе не хватает в обычном сканф?
>_s ничем тебя особо не обязывает
Кроме того что это это виндовая функция
> а при наличии ошибок в коде - тебе может подсказать что ты сделал не так
???? что там она подскажет??
>если ты этому не можешь найти применение.
Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен)
> ты с большими проектами на Си не работал и большой командой?
Работал, не могу сказать что уж совсем большими и что уж совсем большой командой(не совсем понимаю как в С можно работать большой командой и главное почему тогда не перейти на язык который для этого больше подходит)
А ты работал?
>Когда половина кода написана не тобой, и он весьма большой по объему
Да у меня фреймворк с открытым говнокодом я замечательно знаю что это такое.
>анализаторы вполне могут сократить время разработки приложения
Да именно так, статанализаторы это наше всё, но не для студента, студент должен работать САМ и СТРАДАТЬ, а статанализаторы пускай будут когда он поймёт что он делает.
просто читаю ОПа(это ты??) с тем как он в 3-х строках обосрался и вместо того чтоб разобраться и отдебажить пришел ныть на двач со своей "безопасной функцией"
>Смешно, но знаю тонну джавистов которые сбежали от С/С++
Ок, я рад за них, при чём ту это?
>И наверное пишешь 10 строчек в месяц
Я пишу коммерческий код за который платят деньги.
А ты лабораторки в вузе?
>Тогда почему не удаляют?
По тому что кто-то это уже использовал.
>И почему же?
А делать "как все" нельзя? Надо изебнуться? чего тебе не хватает в обычном сканф?
>_s ничем тебя особо не обязывает
Кроме того что это это виндовая функция
> а при наличии ошибок в коде - тебе может подсказать что ты сделал не так
???? что там она подскажет??
>если ты этому не можешь найти применение.
Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен)
> ты с большими проектами на Си не работал и большой командой?
Работал, не могу сказать что уж совсем большими и что уж совсем большой командой(не совсем понимаю как в С можно работать большой командой и главное почему тогда не перейти на язык который для этого больше подходит)
А ты работал?
>Когда половина кода написана не тобой, и он весьма большой по объему
Да у меня фреймворк с открытым говнокодом я замечательно знаю что это такое.
>анализаторы вполне могут сократить время разработки приложения
Да именно так, статанализаторы это наше всё, но не для студента, студент должен работать САМ и СТРАДАТЬ, а статанализаторы пускай будут когда он поймёт что он делает.
просто читаю ОПа(это ты??) с тем как он в 3-х строках обосрался и вместо того чтоб разобраться и отдебажить пришел ныть на двач со своей "безопасной функцией"
>Смешно, но знаю тонну джавистов которые сбежали от С/С++
Ок, я рад за них, при чём ту это?
>И наверное пишешь 10 строчек в месяц
Я пишу коммерческий код за который платят деньги.
А ты лабораторки в вузе?
>Кроме того что это это виндовая функция
Кек. Хорошо горит. Предлагаю всем в треде впредь постить только подобные майкрософтовские функции.
> >Тогда почему не удаляют?
> По тому что кто-то это уже использовал.
Я б удалил с новых версий языка, если их никто не использует из-за того, что это дурной тон.
>По тому
АХАХАХАХАХХАХАХА
Кажется препроцессор писал за тебя.
> >И почему же?
> А делать "как все" нельзя? Надо изебнуться? чего тебе не хватает в обычном сканф?
Защиты от разьеба стека, которую предоставляет _s версия. Замечу, scanf обычный в gcc/glibc это все тоже делает, но без суффикса, ms решили не ломать обратную совместимость.
> >_s ничем тебя особо не обязывает
> Кроме того что это это виндовая функция
Говоришь как будто это что-то плохое.
О ГОСПОДИ, А ЕСТЬ ЖЕ ТОННА СИСТЕМ ГДЕ НЕТУ LIBC И СТАНДАРТИЗИРОВАННЫХ ФУНКЦИЙ, НА НИХ ПИСАТЬ НЕЛЬЗЯ, НЕ КАНОН, ВЕДЬ ТАМ НЕТУ ТОГО К ЧЕМУ ИМЕННО ДОЛБОЕБ ИЗ СИ ТРЕДА НЕ ПРИВЫК, КАКОЙ УЖАС
> > а при наличии ошибок в коде - тебе может подсказать что ты сделал не так
> ???? что там она подскажет??
Поюзай ASan/TSan, дядь, ты устарел.
> >если ты этому не можешь найти применение.
> Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен)
Беру и пишу небольшие циклы do while где удобно. Чет не выгнали ещё за столько лет. Проблемы?
> > ты с большими проектами на Си не работал и большой командой?
> Работал, не могу сказать что уж совсем большими и что уж совсем большой командой(не совсем понимаю как в С можно работать большой командой и главное почему тогда не перейти на язык который для этого больше подходит)
Ты хочешь сказать Си не подходит для большой разработки? Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции.
> А ты работал?
Да. Вполне норм работаю в США.
> >Когда половина кода написана не тобой, и он весьма большой по объему
> Да у меня фреймворк с открытым говнокодом я замечательно знаю что это такое.
Видать ты и поехал крышей после такого дебага.
> >анализаторы вполне могут сократить время разработки приложения
> Да именно так, статанализаторы это наше всё, но не для студента, студент должен работать САМ и СТРАДАТЬ, а статанализаторы пускай будут когда он поймёт что он делает.
"Иисус сказал что надо страдать и мы страдаем все, не только программисты, но особенно программисты, возомнившие себя выше других."
Не мог не вставить.
Зачем страдать, когда можно объяснить и рассказать где про это прочитать? Или ты один из тех программистов, возомнивший себя выше других, который находит в страдании обучение? Я вон учился в универе и не страдал, вполне неплохо обучился, прод не обваливаю, код крутится@лавеха мутится.
> просто читаю ОПа(это ты??) с тем как он в 3-х строках обосрался и вместо того чтоб разобраться и отдебажить пришел ныть на двач со своей "безопасной функцией"
Ни у кого насчёт нее претензий не было, кроме тебя.
> >Смешно, но знаю тонну джавистов которые сбежали от С/С++
> Ок, я рад за них, при чём ту это?
К тому что от таких говнохранителей как ты народ и перестает пользоваться байтоебскими языками.
> >И наверное пишешь 10 строчек в месяц
> Я пишу коммерческий код за который платят деньги.
Тоже.
> А ты лабораторки в вузе?
Смешно.
> >Тогда почему не удаляют?
> По тому что кто-то это уже использовал.
Я б удалил с новых версий языка, если их никто не использует из-за того, что это дурной тон.
>По тому
АХАХАХАХАХХАХАХА
Кажется препроцессор писал за тебя.
> >И почему же?
> А делать "как все" нельзя? Надо изебнуться? чего тебе не хватает в обычном сканф?
Защиты от разьеба стека, которую предоставляет _s версия. Замечу, scanf обычный в gcc/glibc это все тоже делает, но без суффикса, ms решили не ломать обратную совместимость.
> >_s ничем тебя особо не обязывает
> Кроме того что это это виндовая функция
Говоришь как будто это что-то плохое.
О ГОСПОДИ, А ЕСТЬ ЖЕ ТОННА СИСТЕМ ГДЕ НЕТУ LIBC И СТАНДАРТИЗИРОВАННЫХ ФУНКЦИЙ, НА НИХ ПИСАТЬ НЕЛЬЗЯ, НЕ КАНОН, ВЕДЬ ТАМ НЕТУ ТОГО К ЧЕМУ ИМЕННО ДОЛБОЕБ ИЗ СИ ТРЕДА НЕ ПРИВЫК, КАКОЙ УЖАС
> > а при наличии ошибок в коде - тебе может подсказать что ты сделал не так
> ???? что там она подскажет??
Поюзай ASan/TSan, дядь, ты устарел.
> >если ты этому не можешь найти применение.
> Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен)
Беру и пишу небольшие циклы do while где удобно. Чет не выгнали ещё за столько лет. Проблемы?
> > ты с большими проектами на Си не работал и большой командой?
> Работал, не могу сказать что уж совсем большими и что уж совсем большой командой(не совсем понимаю как в С можно работать большой командой и главное почему тогда не перейти на язык который для этого больше подходит)
Ты хочешь сказать Си не подходит для большой разработки? Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции.
> А ты работал?
Да. Вполне норм работаю в США.
> >Когда половина кода написана не тобой, и он весьма большой по объему
> Да у меня фреймворк с открытым говнокодом я замечательно знаю что это такое.
Видать ты и поехал крышей после такого дебага.
> >анализаторы вполне могут сократить время разработки приложения
> Да именно так, статанализаторы это наше всё, но не для студента, студент должен работать САМ и СТРАДАТЬ, а статанализаторы пускай будут когда он поймёт что он делает.
"Иисус сказал что надо страдать и мы страдаем все, не только программисты, но особенно программисты, возомнившие себя выше других."
Не мог не вставить.
Зачем страдать, когда можно объяснить и рассказать где про это прочитать? Или ты один из тех программистов, возомнивший себя выше других, который находит в страдании обучение? Я вон учился в универе и не страдал, вполне неплохо обучился, прод не обваливаю, код крутится@лавеха мутится.
> просто читаю ОПа(это ты??) с тем как он в 3-х строках обосрался и вместо того чтоб разобраться и отдебажить пришел ныть на двач со своей "безопасной функцией"
Ни у кого насчёт нее претензий не было, кроме тебя.
> >Смешно, но знаю тонну джавистов которые сбежали от С/С++
> Ок, я рад за них, при чём ту это?
К тому что от таких говнохранителей как ты народ и перестает пользоваться байтоебскими языками.
> >И наверное пишешь 10 строчек в месяц
> Я пишу коммерческий код за который платят деньги.
Тоже.
> А ты лабораторки в вузе?
Смешно.
>Я б удалил с новых версий языка,
Охуенно, чтоб обновился и твой легаси проект упал, заебись блять и хранить 10 компехляторов.
>Говоришь как будто это что-то плохое.
Использовать что-то особое когда есть обычное с таким же функционалом.
>Ты хочешь сказать Си не подходит для большой разработки?
>Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции.
Да, я вижу когда при разростании проекта наступает момент когда "на плюсах было бы проще"
>Зачем страдать, когда можно объяснить и рассказать где про это прочитать?
За тем что когда ты учишься - это замечательное время обучиться навыку решения говнопроблем и поиска ошибок САМОСТОЯТЕЛЬНО, если ты его обрёл без страданий - честь тебе и хвала, как видешь, вопрашающий не обрёл и вместо того чтоб разобраться и немножно пострадать выбрал "простой путь" а не пройдя хоть пару раз по сложному он в дальнейшем не сможет по нему сам пройтиу него просто банально не будет на это времени
>Ни у кого насчёт нее претензий не было, кроме тебя.
эээ и что? ну у меня есть.
>К тому что от таких говнохранителей
Говнохранителей чего? того что не надо в "свой особый путь"
Если я тебе скажу что я не использую функцию Ссканa ты мне тоже скажешь что я не прав?
>Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен)
Что за ёбань я читаю вообще. Может вам и goio удалить хочется?
Мимокрок
>Так же как и цикл "Ду вайл"(кроме определенных случаев где он действительно уместен)
Мой любимое использование do { / code here / } while(0); для избежания использования большой вложенности операторов if
Ибо: if(condition) break; между которыми помещается код.
В результате, после небольшой привычки, код читается даже легче и выглядит пристойнее, чем куча вложенных if()
Что не так с do?
> Do while
Любой случай, где заранее известно, что условие истина, но стоимость вычисления условия нетривиальна.
Или же случай, где условие не определено до завершения итерации. Примеров море, но мне лень копировать.
А как ты определил, "как все"? Покажи статистические исследования с методикой. А то выянсится, что ты один так пишешь.
Капитан Кросс-Платформенность утверждает, что тупо весь пингвинячий код написан без этой функции. Какие еще вам нужны доказательства?
> do { / code here / } while(0);
Это именно тот случай, я когда встретил это решение то просто охуел от лаконичности.
>>57022
>Примеров море, но мне лень копировать.
Они все замещаются форами или обычным вайлом.
А читать код где кто-то решил показать всё на что он способен и как познал всё до чего можно только дотянуться это пиздец.
>>57025
пик
здраствуте MISRA C rules - 3е правило прямо запрещает срать асемблером куда попало.
> >Я б удалил с новых версий языка,
> Охуенно, чтоб обновился и твой легаси проект упал, заебись блять и хранить 10 компехляторов.
Порой бывает старые проекты не собираются на новых компиляторах. Бывает. Может ты не сталкивался, а я сталкивался.
> >Говоришь как будто это что-то плохое.
> Использовать что-то особое когда есть обычное с таким же функционалом.
Тебя ничего не обязывает юзать что одно, что другое. Если платформа что-то предлагает получше, почему не заиспользовать? Я не вижу в этом ничего плохого.
> >Ты хочешь сказать Си не подходит для большой разработки?
> >Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции.
> Да, я вижу когда при разростании проекта наступает момент когда "на плюсах было бы проще"
Я с таким сталкивался только из-за либ которые есть на С++, а на Си - только хуярить самому wrapper.
> >Зачем страдать, когда можно объяснить и рассказать где про это прочитать?
> За тем что когда ты учишься - это замечательное время обучиться навыку решения говнопроблем и поиска ошибок САМОСТОЯТЕЛЬНО, если ты его обрёл без страданий - честь тебе и хвала, как видешь, вопрашающий не обрёл и вместо того чтоб разобраться и немножно пострадать выбрал "простой путь" а не пройдя хоть пару раз по сложному он в дальнейшем не сможет по нему сам пройтиу него просто банально не будет на это времени
Ну мы ему ответили. Он не станет программистом, вероятнее всего. Или хорошим программистом не станет. Меня это устраивает, меньше конкуренции в будущем.
> >Ни у кого насчёт нее претензий не было, кроме тебя.
> эээ и что? ну у меня есть.
А я у меня нет.
> >К тому что от таких говнохранителей
> Говнохранителей чего? того что не надо в "свой особый путь"
Каждый имеет право на свой путь в программировании, выбрать самому как учиться, выбрать какие функции юзать.
> Если я тебе скажу что я не использую функцию Ссканa ты мне тоже скажешь что я не прав?
Да и я их не использую. Но если будут юзать(даже для чтения ебаного stdin) - ну и норм, это ж не я написал, главное чтоб работало правильно.
> >Я б удалил с новых версий языка,
> Охуенно, чтоб обновился и твой легаси проект упал, заебись блять и хранить 10 компехляторов.
Порой бывает старые проекты не собираются на новых компиляторах. Бывает. Может ты не сталкивался, а я сталкивался.
> >Говоришь как будто это что-то плохое.
> Использовать что-то особое когда есть обычное с таким же функционалом.
Тебя ничего не обязывает юзать что одно, что другое. Если платформа что-то предлагает получше, почему не заиспользовать? Я не вижу в этом ничего плохого.
> >Ты хочешь сказать Си не подходит для большой разработки?
> >Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции.
> Да, я вижу когда при разростании проекта наступает момент когда "на плюсах было бы проще"
Я с таким сталкивался только из-за либ которые есть на С++, а на Си - только хуярить самому wrapper.
> >Зачем страдать, когда можно объяснить и рассказать где про это прочитать?
> За тем что когда ты учишься - это замечательное время обучиться навыку решения говнопроблем и поиска ошибок САМОСТОЯТЕЛЬНО, если ты его обрёл без страданий - честь тебе и хвала, как видешь, вопрашающий не обрёл и вместо того чтоб разобраться и немножно пострадать выбрал "простой путь" а не пройдя хоть пару раз по сложному он в дальнейшем не сможет по нему сам пройтиу него просто банально не будет на это времени
Ну мы ему ответили. Он не станет программистом, вероятнее всего. Или хорошим программистом не станет. Меня это устраивает, меньше конкуренции в будущем.
> >Ни у кого насчёт нее претензий не было, кроме тебя.
> эээ и что? ну у меня есть.
А я у меня нет.
> >К тому что от таких говнохранителей
> Говнохранителей чего? того что не надо в "свой особый путь"
Каждый имеет право на свой путь в программировании, выбрать самому как учиться, выбрать какие функции юзать.
> Если я тебе скажу что я не использую функцию Ссканa ты мне тоже скажешь что я не прав?
Да и я их не использую. Но если будут юзать(даже для чтения ебаного stdin) - ну и норм, это ж не я написал, главное чтоб работало правильно.
>Они все замещаются форами или обычным вайлом.
Да-да, конкструкция с бесконечным циклом и if-break-ами существенно лучше, конечно читается. Аллоэ, за это тред кто-то конкретику про do-while принесёт, или лишь бы кококо?
>>57320
Чтобы что?
>>57312
>Тебя ничего не обязывает юзать что одно, что другое.
<Но давайте выпилим цикл с постусловием, он меня напрягает, похуй на совместимость.
Чот биполярочка
До свидания.
ADD, NEG, MOV (aka LOAD & STORE). RCL, AND, OR, XOR, JZ, JС, JMP.
Пока не проверял, но почти что 100% на этом базисе можно написать любую программу.
Нужно вычитание? Используй вместо него NEG и ADD.
Нужно сдвинуть регистр на один бит влево - используй 31 сдвиг через перенос вправо. Нужен нециклический сдвиг? Сделай перед сдвигом AND по маске. И т.д. по аналогии.
При этом программу будет жутко неэффективная, но мы же речь ведём о минимальном базисе, а не об эффективности.
> >Тебя ничего не обязывает юзать что одно, что другое.
> <Но давайте выпилим цикл с постусловием, он меня напрягает, похуй на совместимость.
> Чот биполярочка
Явно вижу ты не следишь за обсуждением или толком его не читал, потому что отвечаешь на пост человека, который за наличие do-while в си, который срется с противником оного и чет заливаешь за биполярочку. Сессию как сдавать будешь, если ты читать не в состоянии?
мимокрокодил
Я знаю что ты шутишь, но я не привык сдаваться.
Тебе нужен процессор с одной инструкцией MOV?
Это возможно.
Ты можешь зарезервировать несколько физических адресов и сделать процессор с одной инструкцией.
Например, по адресу 0x10000 находится ячейка, при записи в которую процессор переходит на адрес, записанный в неё.
Вот тебе уже и JMP родился.
по адресу 0x10008 запписываешь первый операнд.
По адресу 0x10010 запписываешь второй операнд.
По адресу 0x10018 ты читаешь сумму записанных чисел
По адресу 0x10020 ты читаешь разность записанных чисел.
И так далее.
Вот видишь, оказывается процессор с одной инструкцией возможен. Реализацию условных переходоы мне придумывать лениво, но полагаю что и эта задача решаема.
Не знаю, зачем ты это пишешь - конечно язык с одним mov уже давно сделан.
Вроде как тема эта уже изучена как URISC процессоры. Было бы прикольно чтобы кто-то написал под сие дело компилятор Си, а то дальше ассемблеров дело не доходило.
Извини, в сортах анона не разбираюсь. Постер отвечает на фразу о невозможности компилить старый код новым комилятором после гипоететической правки синтаксиса чем? «Ну и что, и так сейчас бывает».
Это да, но под х86.
А мне б Си компилятор под какой-то bitbitjmp или subleq URISC процессор, такого вроде как нет.
Давайте выпилим будем придерживаться кодстайла и не использовать все виды цыклов только по тому что можем.
Пиздец в си-треде дауны сидеть, дувайл слишком сложный, не надо использовать, вдруг не поймет кто-нибудь.
Закрываю нахуй.
Нужно узнать текущий вход и желательно функцию.
А чем gdb не угодил? Им и вылавливай.
Отловить SIGSEGV можно.
Вывод стэктрейса можно сделать через backtrace() на линуксах, или чем-то другим если система другая.
Потом можно названия функций и смещения конвертнуть через утилиту addr2line в названия файлов и номера строк, если нужно.
sharp?
Именно такая фигня с массивами. Неадекватное поведение даже не только в этом примере, а в других. Вывод на экран тоже, может вывести первые 2-3 элемента ОК, потом какую-то хуйню. Или 1 элемент потом опять невнятное число. К сожалению, писать на других языках запрещено, с радостью бы писал, приходится работать с этим языком.
Например здесь, просто скриншот, в онлайн компиляторе вообще другой вывод, отличный от моего. Почему так он себя ведет и как этого избежать? А да, & пробовал ставить и убирать, вывод не меняется. Не в нем дело.
А что тут объяснять? Ты создал массив из 0 элементов. Навсегда. А потом обращаешься по индексу за его пределами.
list = tmp никакой памяти не выделяет, новых элементов не создает.
>не вижу ничего плохого.
Просто значок & рандомно добавлять-убирать, действительно, что тут такого.
Долбаеб ебаный тебе уже указали на твои ошибки ты продолжаешь высирать полотны малолетнего бреда
int[] пустой чанк памяти которым ты отстреливаешь себе ноги
printf %d на pointer возвращает адрес ссылки
Размер таких массивом должен быть известен на этапе компиляции. В gcc есть расширение, позволяющее писать arr[n], но это не стандарт.
Тебе в твоём случае надо заалоцировать через маллок массив и освободить эту память в конце
>int list[] = {0};
Нет, это только полдела. Так ты создаешь массив с одним элементом. Если ты будешь обращаться [1], [2] то так же вылетишь.
>int list[] = {0};
Компилятор сопоставит общее количество элементов в "{}" и засунит это в []
Тут у тебя хуйня эквивалентная list[1] = {0}
Для динамики маллокейти
это разные языки
>> В gcc есть расширение, позволяющее писать arr[n], но это не стандарт.
Это опциональная часть стандарта, называется VLA, в кланге тоже есть
Надо юзать alloca(), мне так дядька с 40 годами опыта программирования на Си советовал, пока не сдох, было ему 65 лет, эх
Да на стеке можно с запасом выделить и всё.
типа
int list[10000]; // Хули нам, кабанам, 40 килобмайт не память.
Но за название list надо по рукам бить - массив это не списоок.
Можно сделать новый поток и там генерить.
Можно вообще ничего не делать, а смотреть когда игрок сделал ход, сколько времени прошло, и в зависимости от этого насувать N событий.
У тебя чтоль общий цикл как блокирующие функции написан?
Если нет - в него в начало и пихай, там проверяй время (не на каждый же оборот цикла что-то должно происходить)
Если у тебя там уже есть потоки - создай ещё один и в нём делай что тебе надо с вейкап периодом когда тебе надо.
>Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Кто читал? Сколько полезного узнали? Охочусь сейчас за всей инфой по хипу, немножечко не понимаю, надеюсь эта книжка мне поможет.
К слову, не могу понять - Если инкрементировать сам указатель до того как он станет нулевым т.е до конца, он останется на начальном или конечном адресе если делать дереференс?
Я проверил на принте, что он доходит до нуля, только не могу понять остается ли он там.
Выделяешь изначально сколько-то памяти и считываешь пока не встретится символ перевода строки. Если память кончилась раньше чем встретил символ выделяешь ещё в два раза больше и продолжаешь.
У каждой строки есть разумный предел.
Рапира
Скинь скриншотик, у тебякакое убунту?
typedef struct
{
char str = NULL;
size_t size = 0;
size_t cap = 0;
}string_build;
void push(string_build s, char symb)
{
if (s->size >= s->cap){s->cap*=2; realloc(s->data,s->cap);}
s->size++;
}
Само собой в линуксе может только хуй твой отвалиться, быдло невежественное. Линукс нихуя без твоего ведома не сделает, даже убунта. Ты сам нахуевертил где-то с ним, вот и сидишь без вайфая.
В убунте вроде как автоапдейты от каноникал можно включить по умолчанию
void push(string_build s, char symb)
{
if (s->size >= s->cap){s->cap*=2; realloc(s->data,s->cap);}
s->size++;
s->data[s->size-1]=symb;
}
слоуфикс
Ты смог отключить обновления шинде? Просто погугли новости, сколько компов на ней окирпичилось
Раз на раз не приходится. Стабильность дров та ещё шняга, особенно если сетевуха realtek, китайцы не стараются делать норм драйвера, или отвал, или отсутствие дров обеспечено. Более или менее норм на интеловсих wifi, там драйвер являет собой лаунчер огромного блоба, который и под виндой юзается.
Поддвачну этого >>60643, имею ноут на Windows 10. Он уже давно не включается. Он находится при запуске в состоянии попытки поставить апдейт, апдейт отваливается непонятно почему, работается и винда опять ставит апдейт. Мне в принципе похуй, я пекабоярин. Но винда походу там умерла окончательно.
Мне кажется нетестируемые CI/CD апдейты в ОС скоро сыграют в ещё более злую шутку(злоумышленники троянца отправят по всем компам в качестве апдейта). Таким может отличиться или винда, или та же убунта.
Хакир введет строку на 32 гигабайта и взломает твой асус.
>Уже проверил.
Погоду на Марсе если только.
После дереференса нулевого указателя у тебя UB. Сегодня твой компилятор и твоя ОС привели к такому результату, на другом железе у другого человека будет другое.
Блять...
ты че слепой бля? Я же написал: не включал ноутбук несколько дней в последний запуск вайфай работает, щас нет. Да и это офк не первый раз проблемы с еблинуксом. После установки (офиц. версию с флешки, на чистый комп, без винды) у меня просто не регулировалась яркость экрана и не работала добрая половина клавиш Fn не работала. Ахуенная ОС. Только установил - сразу начинается пердолинг.
Кто ебёт, что ты несколько дней с этим выключенным ноутом делал, дебил? Может ты им в футбол играл, может уронил по пьяни. Ты нихуя не понимаешь в устройстве линукс, но уже имеешь наглость свой вонючий рот открывать. Программирование не для тебя, скройся.
>Ты нихуя не понимаешь в устройстве линукс,
Говно говна. С вкраплениями бриллиантов. Но бриллантов мало, а говна овердохуя.
> Почему с виндой я уверен что я сегодня запущу компьютер, и у меня все будет также как и вчера, а с линуксом я даже не уверен что у меня он вообще запустится нахуй?
Не будет. Даже с макосью. Хочешь стабильность - выключай автоапдейты и управляй пакетами сам, как делают все нормальные конторы. Или ставь hardenned gentoo centos
> захожу - отвалился вайфай. Просто так, сам собой)
Если ты починил, то ты знаешь почему он отвалился и как сделать чтобы он не отваливался. Если не знаешь, то ты ещё не починил.
Ты же видишь контекст. В данном случае имелось в виду, какой ISA является самым последним в случае с x86 32-бит.
Да не могу я найти ничего конкретно по этим моментам. Помимо этого, все еще интересуют все остальные вопросы, которые я задал в посте
Хорошо, а что авторы могут понимать под типом машины в данной реализации в таком случае? Есть предположения?
Код компилится, но после запуска неизбежно появляется сообщение об ошибке. Что делаю не так, хотя вроде следую той же логики в своем коде, и гугление дает похожие примеры.
В первом варианте есть условие, по которому функция не вызывается заново, в твоем - условия нет.
Нет никакого вопроса. Ты путаешь идентификацию системы и идентификацию модели процессора.
Я думаю что они просто тиснули что-то типа наименьшего общего элемента. Может быть у тебя система и не использует инструкции 786, кстати.
Почему она должна заново вызваться? Для справки, рекурсии в учебнике посвящено пол темы, и за зацикливание ни слова, только весьма странное описание ее работы на пике. Мне вот допустим нужно чтоб в вызове себя она просто перемножала любое число и все
>Я думаю что они просто тиснули что-то типа наименьшего общего элемента.
Таковым является i386, и дистр действительно собран под эту ISA -- на i386, i486, i586, i686 и i786 заведется.
>Может быть у тебя система и не использует инструкции 786, кстати.
Вот я и не могу понять, а почему? Ведь 786 был 32-бит x86 несколько первых поколений пня четвертого. То есть почему бы в Legacy Mode процу не исполнять именно ISA i786? Почем проц работает в i686?
Но в lscpu белым по черному написано Architecture: i686. То есть проц работает в режиме ISA i686. Почему? Ведь последним ISA для 32-бит x86 архитектуры является i786
i686 - это под какую версию архитектуры x86 собрали бинари, команды процессора новее чем описанные в мануале pentium pro не должны использоваться. На этом все.
Поставь себя на место компьютера и выполняй по шагам.
foo()
{
x=1;
foo();
x=2; //сюда ты не дойдешь никогда
}
Хорошо, то есть ISA процессора в linux узнать невозможно? Ведь мы видим только i686 -- какая архитектура ISA минимально поддерживается ядром системы.
И тогда к чему относится вывод команды uname -i? Там вообще i386, это что?
Точную ISA? Это зависит от архитектуры, конечно же.
В принципе если в выхлопе увидел намек на x86, дальше можно чекать только поле Flags из файла /proc/cpuinfo, там в принципе описаны все фичи/инструкции которые поддерживает процессор. Ну или юзать cpuid.
Допустим архитектура i686, но в flags светится команда popcnt, на оригинальном i686 ее не было, а на твоём процессоре есть, ты можешь написать код который её дёргает, система не кинет тебе SIGILL, хоть и система рассчитана на работу на пентиум про.
Можешь ещё глянуть как написана утилита uname. https://github.com/wertarbyte/coreutils/blob/master/src/uname.c
По сути любое получение инфы, это какая-то уже predefined информация из ядра или glibc.
Обратись к поставщику своей ОС
Я имею в виду, что то, что мы получаем с помощью uname -m -- это информация о том, для какой архитектуры было скомпилировано ядро. В данном случае, для i686. uname -p (по идее) должно выдавать ISA проца. Так как система у нас 32 битка и скомпилена для i686, то проц должен работать, как минимум, в режиме i686 (что он и делает), однако, почему сам проц не работает в режиме i786 (который совместим с i686) который является самым последним и свежим набором команд 32-бит x86 архитектуры?
Я, вообще, правильно понимаю логику или где-то проебался? Я просто уже десяток топиков прочел, везде разные ответы. Также я все еще не понимаю, что выводит uname -i (в данном случае i386)
Если кому интересно, нашел ответ (см. часть про Fedora -- у меня стоит CentOS).
https://unix.stackexchange.com/questions/307955/uname-p-i-are-unknown
Ты логику не понял. Ядро хоть и собранно под i686, можешь на нем гонять инструкции от более новых версий isa если они доступны на данном процессоре. Собранное ядро под i686 не заставляет твой процессор гонять только инструкции для i686, не ограничивает в рамках одной isa, а на новые инструкции проц не будет кидать исключения с неправильной инструкцией.
Исключения наверное lm, который уже x86_64.
Такая тема на каком-то arm или powerpc вероятнее всего не сработает, считай это фичей х86
Короч аноны. Говнокод лонгрид. Мучает меня вопрос...
Пишу под встраиваемки. Часто нужно свапать параметры при изменении в разные места. Например в ПЗУ и на дисплей. Или только на дисплей, а другое на ПЗУ, треть только на ПЗУ.
Четвертое имеет размер не в байт а в 4. И тд и тп.
Причем ок, когда подобной хуйни 5-6, 10, 20.. Можно обойтись пару тройкой энумов и нормально это распихивать и по адресам дисплея и по адресам ПЗУ.
А вот че делать когда их 100 и выше?
В один момент, у меня было 14 C файлов с const массивами, создававшими таблицу:
энум переменной - адрес ПЗУ, адрес дисплея, размер, флаги че с этим делать.
Причем ясен хуй файлы эти хранились отдельно от своих модулей, вместе, т.к. адреса расписывать руками заебнее, чем искать где переменные этого модуля.
Меня в один прекрасный момент это заебало, я решил - еепромы нынче дешевые пиздец и я могу просто ставить размером с ОЗУ, затеняя адреса на еепром.
И наговнокодил вот такую хуйню: https://ideone.com/vDFqUt
Что бы внутри непосредственно модуля, делать вот так: https://ideone.com/t3d5Hn
Сохранение переменной выглядит теперь вот так: VAR_Save(var_props[VAR_ENUM], new_value, NULL);
VAR_Save или Load собственно читает инфу о переменной по адресу в ПЗУ и выполняет действия требуемые в описании.
Например добавляет адрес и размер в очередь на отправку значений на дисплей или в ПЗУ.
Главная особенность этой хуйни, она почти не жрет ОЗУ, жрет столько сколько занимает непосредственно переменная.
При этом обеспечивает моментальную реакцию на изменение.
Это все заебись, только все равно не особо удобно. Если требуется внести изменения в таблицу - милости прошу перепахивать всю хуйню.
Далее, милости прошу соснуть хуйца, если забыл где-то сделать VAR_Save, а просто напрямую записал.
Какие варианты есть еще?
Прям отдельная аля база данных? Но это прям совсем хуйня, т.к.:
- жрет охуеть ОЗУ, на 1 байт будет оверхед из 5-6 байт. Учитывая что большинство переменных такие считай 5х требуемый размер.
- еще более медленное говно, пусть и не сильно.
- требуется либо динамическая регистрация, что еще сильнее разжирнит размер в ОЗУ, один хуй потребует таблиц адресов (ну или при каждых изменениях - сохраненные настройки ВСЕ, т.к. адреса поехали).
- снова городить таблицы внутри, что возвращает меня к первоначальной проблеме.
- один хуй останутся функции чтения\записи
Короч аноны. Говнокод лонгрид. Мучает меня вопрос...
Пишу под встраиваемки. Часто нужно свапать параметры при изменении в разные места. Например в ПЗУ и на дисплей. Или только на дисплей, а другое на ПЗУ, треть только на ПЗУ.
Четвертое имеет размер не в байт а в 4. И тд и тп.
Причем ок, когда подобной хуйни 5-6, 10, 20.. Можно обойтись пару тройкой энумов и нормально это распихивать и по адресам дисплея и по адресам ПЗУ.
А вот че делать когда их 100 и выше?
В один момент, у меня было 14 C файлов с const массивами, создававшими таблицу:
энум переменной - адрес ПЗУ, адрес дисплея, размер, флаги че с этим делать.
Причем ясен хуй файлы эти хранились отдельно от своих модулей, вместе, т.к. адреса расписывать руками заебнее, чем искать где переменные этого модуля.
Меня в один прекрасный момент это заебало, я решил - еепромы нынче дешевые пиздец и я могу просто ставить размером с ОЗУ, затеняя адреса на еепром.
И наговнокодил вот такую хуйню: https://ideone.com/vDFqUt
Что бы внутри непосредственно модуля, делать вот так: https://ideone.com/t3d5Hn
Сохранение переменной выглядит теперь вот так: VAR_Save(var_props[VAR_ENUM], new_value, NULL);
VAR_Save или Load собственно читает инфу о переменной по адресу в ПЗУ и выполняет действия требуемые в описании.
Например добавляет адрес и размер в очередь на отправку значений на дисплей или в ПЗУ.
Главная особенность этой хуйни, она почти не жрет ОЗУ, жрет столько сколько занимает непосредственно переменная.
При этом обеспечивает моментальную реакцию на изменение.
Это все заебись, только все равно не особо удобно. Если требуется внести изменения в таблицу - милости прошу перепахивать всю хуйню.
Далее, милости прошу соснуть хуйца, если забыл где-то сделать VAR_Save, а просто напрямую записал.
Какие варианты есть еще?
Прям отдельная аля база данных? Но это прям совсем хуйня, т.к.:
- жрет охуеть ОЗУ, на 1 байт будет оверхед из 5-6 байт. Учитывая что большинство переменных такие считай 5х требуемый размер.
- еще более медленное говно, пусть и не сильно.
- требуется либо динамическая регистрация, что еще сильнее разжирнит размер в ОЗУ, один хуй потребует таблиц адресов (ну или при каждых изменениях - сохраненные настройки ВСЕ, т.к. адреса поехали).
- снова городить таблицы внутри, что возвращает меня к первоначальной проблеме.
- один хуй останутся функции чтения\записи
Не думаю что кто то вообще понял о чем идет речь.
Все равно не понятно.
Операторы такие, биты в регистрах сдвигают.
>> и <<
Операторы
Было в регистре число 5 = 101b
Сдвинул влево на 2 позиции, стало число 10100b = 20, сдвиг влево по сути умножение на 2(522).
Сдвинул на 2 позиции опять же число 101b, вышло 1b = 1, сдвиг вправо по сути деление на 2 целочисленно((5/2)/2).
Ещё есть сдвиги разные в процессорах, и сдвиги циклические. Всё это в инете почитаешь.
>Сап, поясните за битовые сдвиги.
сдвиг на один бит влево равносилен умножению на 2
сдвиг на один бит вправо равносилен делению на 2
сдвиг на два бита - на 4
сдвиг на три бита - на 8
etc.
Да
Нет с uint34_t и выше.
окей, то есть, каждый сдвиг на >> 1 будет умножать на число в два раза больше: 1>> 2 | 2 >> 4 |3 >> 8| 4>> 16 и т.п.
И на сколько можно двигать позиций максимум 32 я так понимаю?? И еще вопрос один глупый вопрос, как переводить с двоичной допустим в 10-ричную. Можно ли при помощи сдвигов это реализовать? Препод нам ляпнул про сдвиги, но объяснять не стал, сказал что еще рано (ебать рано - почти все темы ебнули, а про сдвиги так и не объяснил)
Зависит от размера переменной.
Второй вопрос смешной. Внезапно, представление целочисленных регистров и переменных только в битах(и байтах). Считай что запись десятичного числа в переменную уже переводит его в биты.
С битовыми сдвигами можно легко биты эти вывести.
> как переводить с двоичной допустим в 10-ричную.
А вот тут тебе уже без настоящего деленя не обойтись.
Вообще такого понятия как перевод из одной системы исчисления в другую для компьютера не актуален. Если закрыть глаза на существующую в 8086 десятичную арифметику, которая давно никем не импользуется. Поодумай эту мысль.
А теперь о том, как вывести на уэкран число в десятичном виде.
Берёшь массив char элементом на... ну 10 хватит.
Делишь переводимое число на 10. К остатку прибавляешь ASCII код нуля и пишешь в последний элемент массива. Проверяешь частное - если не ноль, то повторяешь операции, и записываешь в предпоследний элемент массива, иначе в массиве ASCII коды цифр преобразуемогоо числа.
Смотри пример. Число 0xC. При делении на 10 остаток равен трём и частное равно единице. Три записываешь, единицу делишь снова на 10, получаешь один в остатке и ноль частное. Вот у получилист у тебя цифры 3 и 1. Но поскольку ты записываешь их в массив с конца, то будет 1 и 3, т.е. 13.
> как переводить с двоичной допустим в 10-ричную
int number = 100500;
char str[16];
sprintf(str, "%d", number);
d тут значит decimal.
Попробуй ещё %o, %x. octal, hexadecimal
Такая-то тонкота. Как будто в тред скриптовых языков вкатился.
очень интересно, но ничего не понял
а соре, я слеп
Смешно, но это реально один из самых простых способов перевести число. Ещё можно itoa юзать, но она не стандарт.
сложно
окей, так. Мне в руки попала программа. Перевода с 10 в 16-ричную.
Так там мужик объясняет, что в конце нужно добавлять 0xf для перевода в 16-ричную. объясните мне что да как, за сегодня только еще больше путаницы произошло в моем мозгу. Возможно я что-то не так понимаю
Совершенно нет желания этим заниматься. Это разжевывается в любом учебнике информатики примерно в начале.
Да, F это самая большая однозначная цифра, после нее идет 10. Как в десятичной после 9.
Да, походу я сморозил глупость.
int val = 0x3e7211da;
int pos = 10;
char num[10];
num[--pos] = '\0';
do
{
num[--pos] = '0' + val % 10;
val /= 10;
}
while(val);
puts(num + pos)
Не проверял. Надеюсь что ты проверишь. Но я настолько крут, что в 99% этот код рабочий.
Statement переводится примерно как "выражение". Проблема в том, что Expression тоже переводится как выражение.
Гадать не нужно, все описано тут
https://en.cppreference.com/w/cpp/language/statements
Есть statement, скажем условно что это утверждение.
statement может быть разных видов, например expression то есть выражением.
Выражение (expression) состоит из operators с операндами как сказано тут
https://en.cppreference.com/w/cpp/language/expressions
Как же красиво это наебнётся - любо-дорого посмотреть.
Ты используешь do while, а значит по мнению местного шизика тебя б уволили к хуям собачьим.
???
??
?
кто кого наебал?
Ты его. Это лютый оверрейт который форсят авторы гайдов чтобы лутать орбы с лохов.
хз, я просто увидел топ моды и поставил цену на обум. я уже и забыл про это кольцо, еще немного и сдал бы вендору. не знаю ни один билд, кому бы такая солянка зашла даже за 30с. с другой стороны, уже конец лиги, мб месяца полтора назад на него еще и был бы спрос...
Тетрадка в клетку. Пишешь в клетки слова по буквам. Все диды так делали.
А разве наши диды не ваевали, когда где-то в США диды строки в тетрадки писали?
Оки попробую.
А по малокам книжки есть какие?
path of exile
сначала мне интересно было понять, как работает эта тулза https://github.com/SnosMe/awakened-poe-trade
она каким-то образом определяет предмет, на который ты ткнул в gui самой игры вплоть до получения свойств предмета, и показывает его цену на игровом рынке. покопался я в исходниках и нашел какие-то намеки на использование хуков, но целиком сам процесс именно этого приложения понять не смог. при этом, за это приложение не банят и на офф форуме игры его обсуждают/советуют + стримеры им пользуются.
сейчас я хочу сделать что-то подобное, только чтобы получать информацию о текущих квестах в игре. это нужно для того, чтобы бегать сюжетку максимально быстро и не сворачивать игру на гайд - не тратить время на это. игра построена так, что можно делать параллельно задачи в игре, даже если игра еще сама не говорит о них, а чтобы делать такое без гайда, надо прокачать героев 100 наверное и тупо вызубрить этот монотонный процесс. т.е. суть моего помощника в том, чтобы в реальном времени транслировать, если не в сам процесс игры, то в процесс этого приложения информацию о следующем действии. для этого надо как-то обрабатывать состояния квестов в процессе игры и получать от них информацию.
Что и чему позволяет осуществять наличие файловых дескрипторов, если есть PID'ы + fork(), open(), exit() и т.д ? Никакие гуглы и книжки по-програмиздски человеческим языком пояснить не могут.
Из всего что ты перечислил, только open() имеет отношение к файловым дескрипторам. Собственно open() при открытии файла и возвращает этот дескриптор, с помощью которого ты осуществляешь операции с открытым файлом.
Куда возвращает? Родительскому процессу? А дальше что происходит, род. процесс этот дискриптор параметром в его (родительских) вызовах использует? Для чего?
Неправильные вопросы задаёшь. Это плохо.
>Куда возвращает?
Функция open() возвращает файлоый дескриптор или -1, если по какой-то причине не удалось открыть файл.
>Родительскому процессу?
Тому процессу, который вызывает функцию open()
> А дальше что происходит, род. процесс этот дискриптор параметром в его (родительских) вызовах использует?
Дальше ты используешь этот дескрпитор в функциях write и read, f так же close()/
>Для чего?
Чтобы писать в файл и читать из файла.
fork() это другое - это порождение нового процесса путём его клонирования. После него у тебя будет два одинаковых процесса и каждый из них будет иметь одинаковые открытые файлы.
exit() вообще не использует файлоые дескрипторы, а просто завершает программу. При этом ОС сама закроет все открытые файлы. Но лучше это делать явно.
Т.е процесс 1 вызывает open() для открытия файла 1, и если у вызова(?) этого не получается, то он возвращает процессу 1 дескриптор -1? А дальше при попытке вызвать read() или write() процессом 1 в них (read/write) передаётся уже полученный дескриптор -1 в качестве аргумента?
Если тебе функция open вернула -1, зачем дальше пытаться read/write? Выводишь сообщение об ошибке пользователю retry/abort либо завершаешь прогу.
В таком случае в какой раздел вирт. адресного диапозона процесса записывается дескриптор? Получается когда процессор до него (дескриптора) доходит, он что-то вроде джампа к инструкциям завершению/приостановке процесса делает?
Затем что я наверное способен это понять если буду досканально представлять что где и как происходит. Просто реально, куда именно внутри процесса дискриптор записывается? Как именно он на исполнение/своппинг/завершение повлиять может?
Расскажи нам, что такое файловый дескриптор. Ты же читал какие-то книжки, а в книжках это объясняют. А если не читал или не понял, то почему дегенератские двачи должны тебе объяснить.
"Проще говоря, когда вы открываете файл, операционная система создает запись, представляющую этот файл и хранящую информацию об этом открытом файле. Таким образом, если в вашем OS открыто 100 файлов, то в OS будет 100 записей (где-то в kernel). Эти записи представлены целыми числами, такими как (...100, 101, 102....). Этот номер записи является дескриптором файла. Таким образом, это просто целое число, которое однозначно представляет открытый файл в операционной системе. Если ваш процесс открывает 10 файлов, то в таблице процессов будет 10 записей для файловых дескрипторов."
То что это число выдаваемое процессам я понял, но как именно они на процесс влияют? Каким образом говорят процессу выполнять/невыполнять какие-то вызовы? Хуй мне на ротешник в разъяснений вопроса прилетает везде.
> читает какие-то машпереводы
Вот оно че.
> Каким образом говорят процессу выполнять/невыполнять какие-то вызовы?
Это просто число, данные. Дальше процесс может передавать его как аргумент в другие системные вызовы. Что такое вызов функции, ты представляешь?
>Что такое вызов функции, ты представляешь?
Не очень. Знаю что функция main все остальные вызывает, а её в свою очередь ещё какой то процесс (то-ли cli, толи инит). Да и честно сказать про стек подзабыл, помню что туда всё заносится по принципу FIFO до 1-8Мб, по-этому лучше указатели в случае динамических структур/массивов использовать.
Всё из-за того что практики по темам нихуя. Даже найти себе задачи проблема. А без этого всего и читать/понимать код/api не выйдет.
В теле функции находятся statemets, один из них - expression statement:
[expression] ;
Expression составляется из переменных, констант и операторов, которые к ним применяются.
Ебать у тебя каша в голове.
crt0 вызывает функцию main. (JFYI)
Короче, у тебя уникальный случай. Вот бывыают пустые головы, которые ничего не знают. Но у тебя в голове куча обрывочных сведений, смешавшихся в кашу. Такого феерического пиздеца надо ещё поискать. Тебе проше забыть всё что знаешь и начать изучать Си с "чистого листа".
Я бы, честно говоря, охуел бы и застрелился в голову, если бы внезапно узнал что ты мой студент.
А ты Вы преподаете?
>начать изучать Си с "чистого листа"
Может и так. Только вероятно опять из головы велетит от отсутствия практики.
Прату попробой только делай задания после каждой главы.
> Короче голова болит, что делать
Кодить на нормальном языке, от себя могу посоветовать python.
tolsto
От себя советую джаваскрипт.
Недавно, впервые в жизни, подумал прикоснуться к сетевой параше - написать серверок с передачей данных в удаленный браузер. На чем такое делать - в душе не ебу, но вспомнил, что уже пользуюсь удобным серверком из одного экзешника, в свойствах которого было написано "node.js". Так что решил тоже на ноде писать за неимением других мыслей. Проиграл с этого джаваскрипта. Пишешь хуйню от балды, на чистой интуиции, и оно работает! Просто ор выше гор. Язык почти соответствует парадигме, где беспардонно пишешь "сделай заебись" и норм.
Зачем ты удолил браузер? Восстанови.
Кароч хочу я чтобы была возможность в строки писать на любом языке. Однако при компиляции я постоянно ловлю пикрелейтед 1. Но при этом OnlineGDB прекрасно с этим справляется. Почему так, и самое главное, можно ли это пофиксить?
Гугл подсказал следующее решение (пик.3), но оно какое-то геморное, не говоря уже о том, что я пока понятия не имею что это вообще такое.
Сменяй кодировку в терминале
Гугол говорит просто добавить в settings.json
"terminal.integrated.shellArgs.windows": ["-NoExit", "/c", "chcp.com 65001"],
Спасибо.
Уточню что кодовая страница 65001 это utf-8 (не знаю насколько полноценно), мало ли тебе это важно.
>хочу я чтобы была возможность в строки писать на любом языке
Хотеть не вредно.
В си строк нет, есть только байты. Так что, если тебе нужны строки, ты сам должен их сделать из байтов. Иными словами, не понимая что такое строки и как работают разные кодировки, ты ничего не напишешь. Можешь разве что высрать говно, которое будет работать только у тебя на компьютере, а у остальных кракозяблы и краши.
>оно какое-то геморное, не говоря уже о том, что я пока понятия не имею что это вообще такое
Вот съеби и не возвращайся пока не поймешь. Или съеби программировать на питоне. В любом случае - съеби, пока что ты не туда зашел, петушок. Си не тот язык, где можно писать на авось сам не зная что.
1)fork() возвращает родителю PID ребёнка, ребёнку возвращается 0;
2)У ребёнка меняется PPID (Parent Process Id) на PID родителя.
Почему меня PPID ребенка не равен пиду родителя ?
я залетел не в тот тренд?
Удали свой абортуалбох.
main()
{
int pid = fork();
if (pid == 0)
printf("%d %d %d\n", pid, getpid(),getppid());
else
printf("%d %d %d\n", pid, getpid(),getppid());
}
$ ./a.out
4868 4867 4834
0 4868 4867
Этот прав, ppid сына в юниксе тогда становится 1.
лол, спасибо анон. А что это получается мой виртуалбокс мне паскудит?
Этож сколько явного/неявного гемороя я хапану из за него.
/a.out
8769 8768 7373
0 8769 1490
> 8769 8768 7373
> 0 8769 1490
7373 должен быть пид твоей оболочки, а кто такой 1490?
Там должен быть пид родителя (8768) или 1.
pydof systemd = 1490.
с помощью pgrep методом тыка нашел что 7373 - pid баша.
получается что 7373 пид-баша, когда процесс родитель схлопнулся раньше времени(хер знает почему), как сказал анон >>65208,
потомок вместо того чтобы получить себе в ппид пид-баша-7373, получает в свой ппид пид-системд-1490.
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#include <stdlib.h>
wchar_t get_wcs() {
wchar_t buf[81] = {0};
wchar_t res = NULL;
int len = 0;
int n = 0;
do {
n = wscanf(L"%80[^\n]", buf);
if (n < 0) {
if (!res) {
return NULL;
}
} else if (n > 0) {
int chunk_len = wcslen(buf);
int str_len = len + chunk_len;
res = realloc(res, sizeof(wchar_t) (str_len + 1));
wmemcpy(res + len, buf, chunk_len);
len = str_len;
} else {
wscanf(L"%c");
}
} while (n > 0);
if (len > 0) {
res[len] = '\0';
} else {
res = calloc(1, sizeof(wchar_t));
}
return res;
}
int main() {
wchar_t s = NULL;
s = get_wcs();
int n = wcslen(s);
if (/1/(L'А' <= s[n-3]) && (s[n-3] <= L'я') && /2/(L'А' <= s[n-2]) && (s[n-2] <= L'я') && /3*/(L'А' <= s[n-1]) && (s[n-1] <= L'я'))
fputws(s, stdout);
}
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#include <stdlib.h>
wchar_t get_wcs() {
wchar_t buf[81] = {0};
wchar_t res = NULL;
int len = 0;
int n = 0;
do {
n = wscanf(L"%80[^\n]", buf);
if (n < 0) {
if (!res) {
return NULL;
}
} else if (n > 0) {
int chunk_len = wcslen(buf);
int str_len = len + chunk_len;
res = realloc(res, sizeof(wchar_t) (str_len + 1));
wmemcpy(res + len, buf, chunk_len);
len = str_len;
} else {
wscanf(L"%c");
}
} while (n > 0);
if (len > 0) {
res[len] = '\0';
} else {
res = calloc(1, sizeof(wchar_t));
}
return res;
}
int main() {
wchar_t s = NULL;
s = get_wcs();
int n = wcslen(s);
if (/1/(L'А' <= s[n-3]) && (s[n-3] <= L'я') && /2/(L'А' <= s[n-2]) && (s[n-2] <= L'я') && /3*/(L'А' <= s[n-1]) && (s[n-1] <= L'я'))
fputws(s, stdout);
}
кароче поставил задержку sleep(1) все начало работать корректно.
Если кому интересно.
1) Создается процесс батя ppid=7373, pid=8768, child_pid = 8769
2) Создается процесс ребенок ppid = 8768, pid = 8769, value = 0
3) запускаем наше файло. Мой терминал думает что программа завершена - выводит результат процесса бати, после чего думает что все закончено - уничтожает процесс бати, после чего ребенок получает в свой ppid pid systemd, сверху по иерархии процессов.
Единственное я не понял, почему два a.out? мы же делаем форк от текущего процесса где мы находимся т.е от баша. Должен же быть баш родитель, а a.out чайлд. Я же верно прочитал по схеме, что из баша создается один родитель и один ребенок(красным обвел), т.е за одну функцию fork() мы создаем +2 новых процесса?
От родителя создаем еще одного родителя, а от второго ребенка? wtf?)
Вот это бабах неосилятора.
Подскажешь?
UTF-8 кодировка, ну или UTF16, UTF-32
Сорян, забыл уточнить, но мне нужно через библиотек wchar.h
теоретическая часть у конькова/карпова откровенно дерьмовая. Теорию по Таненбауму.
почему условие на '\n" не срабатывает?
while (arrayString != '\n'){
scanf("%c", &arrayString);
printf("Âû ââåëè ñèìâîë %d: %c\n", i, arrayString);
i++;
//arrayString = '\n';
};
Ну потому что arrayString у тебя указывает всегда на одно и то же место? Ведь ты только i увеличиваешь.
Макаба съила квадратные скобки ииндексы и кавычки у \n,, но символы считываются потом выводятся но условие в while не срабатывает. Если напрямую присвоить (под комментом) цикл прерывается. С-free win XP.
Незнаю, но у меня жирный проект и специфичный дурной компилятор и я его всю жизнь ИДЕ билдил и там всегда пиздос был в мейкфайле. Но тут чет пришлось подразобрать его и вытащить сборку из IDE.
>>65824
Есть но я стремался ибо вообще не ебал что они должны делать и как.
Конечно буду теперь их изучать. Вообще мейк такой блевотный, что надо что то безмейковое искать.
>Вообще мейк такой блевотный, что надо что то безмейковое искать.
Есть Scons правда я не уверен что пидором не назовут
Ничем, он просто не нужен, как и make.
Пользуются этим только шизоидные пердуксоиды, зачем-то пишущие виндовые программы линуксными инструментами. У некоторых голова из жопы выросла, что поделать, бывает.
Мне cmake попроще кажется чем написание скрипта под make. Не агитирую за него, просто стало интересно что аноны думают о нём.
>>65854
А как тогда приделывать CI/CD? Или надо на хосте поднимать IDE для сборки и тестирования проекта? Или обязательно системы сборки должны быть headless-IDE по сути которые должны хавать файлы проектов?
Бамп вопросу. С do while так же не срабатывает.
Ты тред читал? Do while юзать нельзя, в уважаемых конторах за такое увольняют. Так Анон говорил!
В примере с do while ты чекаешь в условии цикла следующий элемент, ведь перед проверкой бахнул i++, естественно не будет работать
Шиз всравший 5 лет, спок.
А зачем они это делают? Вот дураки.
Ну тут однозначно счетом древних русов.
Какое такое?
576x1024, 0:10
Анон, я вообще не понимаю как это отследить, но когда я делаю прием в отдельном потоке, нон-стоп зацикливая чтение, (даже без синхронизации с основным), программа весело кидает segmentation fault в какие-то произвольные моменты времени.
Я вообще не имеею опыта в программировании ядра, как всю эту херь отследить? Есть ли какие-то ограничения на все эти виртуальные памяти ОС и потоки? Что такое AIO, как его можно использовать (драйвер поддерживает)?
>нон-стоп зацикливая чтение, (даже без синхронизации с основным), программа весело кидает segmentation fault в какие-то произвольные моменты времени.
А если буфер уменьшить?
А если читать в основном потоке, а писать из другого?
А если драйвер кривой и не позволяет одновременные чтение и запись?
Не поня тно. Эсли в read пытаться читать не туда, программа получит ошибку, а не сигнал.
А в стектрейсе что при падении?
но все равно спаибо!
Показ десятичного числа.
А в памяти числа всё равно в виде нулей и единиц хранятся, Представление отображения имеет смысл как раз при вываоде.
Но значительно лучше массив и начальное значение pos сделать размерность хотя бы 16 элементов, а не 10. Иначе там очень хитро стек рушится. Так рушится, что устанешь отлавливать ошибку.
Нет. Там складывают символ '0' и число.
http://www.cpp.sh/4e545
Так длл инклюдятся
Не так давно натыкался на новые книги по Си, года 2018-2020-го. Теперь вспомнил, но найти уже не получается. Гуглить книги по Си очень сложно, из за однобуквенного названия. Знает кто какие новые книги есть? Все статье в топку. И книги Праты тоже. У него даже про компилятор ничего не написано. Не было интернета и я толком не мог разобраться как из объектного файла сделать бинарник.
> как из объектного файла сделать бинарник
Подобное описано в документации к твоему компилятору. Язык никак не регулирует такое.
Как померить сколько сокет соединений будет держать на одной машине?
TCP - 1 сокет на accept входящих(слушающий), 1 сокет - на каждое 1 соединение.
UDP - 1 сокет на тонну соединений работает.
А если тебе нужно узнать сколько будет тачка соединений держать - утилиту пиши или ищи готовую.
Охуенно, писать книгу по Си на 1000 страниц и не написать 10 строк о том как компилировать. И тут же адвокат прибежал защищать. Говно книга.
>65,535
Откуда цифры? Я хочу ноду померять. Один чувак на конференции сказал, что она только 2к держит. Не верится. Да и давно это было, в 2015.
>А если тебе нужно узнать сколько будет тачка соединений держать - утилиту пиши или ищи готовую.
Так я и спрашиваю как померять, какие утилиты есть и т.п.
Пошел нахуй хуесос. Встреться ты мне, посмотрел бы как бы ты в лицо это сказал, хуета, шкальник ебучий.
Мы тут на си погромируем, а не утилитами занимаемся.
Тем более вообще неясно что ты там тестировать собрался.
Особо одаренный? Вы все тут говоришь такие? Измерить сколько сервер на ноде сможет держать сокет соединений.
На хуй твоя жопа хороша. Не знаешь ответа на вопрос - молчи. Не хуй выебываться. Школота ебаная.
Не, ну ты реально дебил. Согласен с тем аноном.
Ты действительно думаешь, что оскорбляя тут кого-то, тебе кто-то поможет?
Он и другие первые начали. Я нормально задал вопрос.
Клал я на тебя, идиот блядь. Только если ты думал, что вы тут молокососы можете всех хуесосить, то ты сильно ошибся. Я вас сам так заебу, что в лес убежите.
Бамп. Помогите. У меня самого не получается. Исправление одной ошибки ведёт к несовместимости типов данных в других местах, с невозможностью преобразовать типы.
Читать умеешь? Что в выводе написано? Написано 4:20: fatal error: stdafx.h: No such file or directory, как переводится?
Этот код мне уже кто-то чуть переделывал без stdafx.h и с добавлением stdio, но я потерял тот код, а сделать сам так же без stdafx.h не могу.
Это windows специфичный код. В крестах не спец, как и в винде, но думаю ты не скомпилишь в этом онлайн шеле.
У меня VS2019 есть, онлайн компилятор просто чтобы дать ссылку на код. Могу ссылку прям на совсем всё скинуть, если надо. https://drive.google.com/drive/folders/0B0tDS9ufZC7EVmFCb05OZ0pRZVk
И да, я вижу, что по моей ссылке есть stdafx.h, но я не вижу смысла его подключать, если можно сделать точно так же и без него.
#define bit8 0x80
#define bit7 0x40
#define bit6 0x20
#define bit5 0x10
#define bit4 0x08
#define bit3 0x04
#define bit2 0x02
#define bit1 0x01
int n;
int a[1000];
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
scanf_s("%d", &a[i%10]);
}
for (int i = 0; i < n; i++) {
printf("%x : ", (unsigned char)a);
printf("%x", (a & bit8) ? 1 : 0);
printf("%x", (a & bit7) ? 1 : 0);
printf("%x", (a & bit6) ? 1 : 0);
printf("%x", (a & bit5) ? 1 : 0);
printf("%x", (a & bit4) ? 1 : 0);
printf("%x", (a & bit3) ? 1 : 0);
printf("%x", (a & bit2) ? 1 : 0);
printf("%x |", (a & bit1) ? 1 : 0);
}
соре за тупые вопросы, но я опять тут. Почему он не выводит больше 2 символов в 16 ричной?
#define bit8 0x80
#define bit7 0x40
#define bit6 0x20
#define bit5 0x10
#define bit4 0x08
#define bit3 0x04
#define bit2 0x02
#define bit1 0x01
int n;
int a[1000];
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
scanf_s("%d", &a[i%10]);
}
for (int i = 0; i < n; i++) {
printf("%x : ", (unsigned char)a);
printf("%x", (a & bit8) ? 1 : 0);
printf("%x", (a & bit7) ? 1 : 0);
printf("%x", (a & bit6) ? 1 : 0);
printf("%x", (a & bit5) ? 1 : 0);
printf("%x", (a & bit4) ? 1 : 0);
printf("%x", (a & bit3) ? 1 : 0);
printf("%x", (a & bit2) ? 1 : 0);
printf("%x |", (a & bit1) ? 1 : 0);
}
соре за тупые вопросы, но я опять тут. Почему он не выводит больше 2 символов в 16 ричной?
все понял, глупая ошибка была
https://github.com/satori-com/tcpkali
https://aur.archlinux.org/packages/tcpkali/
Никто здесь эту задачу сам не решит. Это перечислительная комбинаторика, ее почти никто не изучает даже в вузах, по ней мало книг и вообще инфы на русском.
Молодец, я в курсе, что sizeof((struct sockaddr ∗)NULL->sin_port) == sizeof(uint16_t). Что сказать-то хотел?
Децибел, блядть, позиция бита в слове - величина сдвига единицы, как и индекс в массиве - оффсет от начала. Откуда вы беретесь в Си-треде?
берьош сокет, ебошиш коннекшн, погроммируеш... фантазия кончилась?
раз такой умный, кинь мне книги по которым учился. Буду благодарен. Нам препод нихуя не объясняется. Учимся сами по себе.
>Охуенно, писать книгу по Си на 1000 страниц и не написать 10 строк о том как компилировать.
Я тебя понимаю, но на самом деле очень-очень зависит от твоей ОС, компилятора, среды разработки и т.п.
Хотя если пишешь книгу для нулевых, было бы полезно небольшой экскурс в этой части дать, на примере пары компиляторов, например.
Всё зависит он настроек ОС и как конкретно коммутация устроена. Можно и миллион держать, в принципе.
И, естественно, ещё сильно зависит от того, как обработчик соединений реализован. Он может тупо много не тянуть.
>раз такой умный, кинь мне книги по которым учился. Буду благодарен. Нам препод нихуя не объясняется. Учимся сами по себе.
Вот увидишь он сдуется. Или посоветует дерьмо какое нибудь. Сам небось кроме хеловорлдов ничего не писал.
Надеюсь на обратное. Хочу верить в людей.
>И, естественно, ещё сильно зависит от того, как обработчик соединений реализован. Он может тупо много не тянуть.
Это самое главное. Для этого и хочу тесты провести. Нашел одну из лучших утилит для тестирования сокетов и вебсокетов. Но блин, не смог собрать на ядре 5.8, ее не обновляли уже 3 года. Вот я писал уже >>69179
Хз что делать. Сам я пока вряд ли смогу хотя бы приблизиться к пониманию как пофиксить. Автор и другие мейнтейнеры забили на все, почти все живут зарубежом и работают в крутых компаниях, видать им не до этого.
Можешь что то посоветовать, литературу, ссылки, краткий алгоритм как изучать системное программирование на линуксе? Думаю форкнуть проект и ковыряться чтобы понять как устроен. Опыт программирования есть, но на высокоуровневых языках. Трудостей не боюсь, самообучаться умею, но так как область для меня новая и если можно так выразиться олдскульная (средний возраст тех кто пишет на си под линукс думаю больше 40 лет), то пока не понял как составить план обучения.
Ну собственно решить ее можно вообще с 0 знаний, тупо a x 100 + b x 10 + c и гонять цифирки между ними, и считать количество перестановок, только нахуя? Дрочево уровня делить на бумаге в столбик.
На си такие утилиты писать то ещё удовольствие.
Смотря что ты хочешь оттестировать вообще. Я игрался для себя, тестировал, сколько соединений можно держать. Я точные цифры не помню, довольно быстро начинаются проблемы с ограничениями ОС, но они же легко снимаются.
Реально проще тестировать с nodejs или python-asyncio, или go, вместе с докером, чтобы много виртуальных хостов создать с разными адресами.
На Си вообще не стоит в это лезть, если только вот совсем-совсем не нужно именно на Си. Потому что там начинаются нюансы, что либо треды, которые тормозные, либо всякие sselect/kqueue, либо какие-нибудь специфичные внешние либы вроде libevent. Скорее всего будет последнее, иначе ты рухнешь очень рано, но сюрприз, другие платформы тоже построены на этих библиотеках и благодаря этому работают очень быстро.
Поэтому, если ты не пишешь свой nginx, работаешь с сетью, то реально, не лезь в Си, не нужно. Он не для этого. Он для байтоёбства, а не для обслуживания системных вызовов ОС. Посмотри на Go, если хочется низкого уровня, на nodejs/asyncio, если хочется высокого уровня.
Ты наверное не совсем понял. Утилитой tcpkali я хочу протестировать как раз ноду, go, и другие языки. Так как собрать ее не получается, решил углубиться в си. Все равно рано или поздно придется начинать. Более верхнеуровневые языки и платформы я использую, они мне понятны, пришло время опуститься ниже. И как раз появилась интересная задача. Писать свой load tester с нуля я не буду. Да и не за чем. Это будет сложнее чем разобраться с tcpkali. Ее писали опытные телекомщики. Сам я так не напишу. А вот посмотреть их решения могу. Думаю это принесет пользу.
Эталонное решение должно выглядеть как рекурентное соотношение, а реализация соответственно как рекурсивная фукнция. Тупо в лоб можно конечно решить, но это не инженерный подход.
1) С
2) С++
3) не ебать мозги совсем, ознакомиться с Cython и дальше изучать Матлаб.
Продублирую в соседний тред.
Уроки учи школьник. В некоторых языках нет циклов, только рекурсия. Комбинаторные алгоритмы эталонно решаются исключительно рекурсией. Такова их природа. Они рекурсивны. И только если возникает необходимость, рекурсивное решение оптимизуют каким либо образом.
Под эти задачи С просто не подходит
В С++ будешь катиться минимум года два, но оно того может стоит. Будучи икспертом в крестах, можно выйти на некст лвл хай лвл программирования даже относительно питона и вмазаться лиспохаскельными биндами. Но ты по-хорошему должен решить, нужно ли оно тебе вообще и достаточно ли ты биг достаточно ли брейн
Cython и матлаб вариант, если ты уже присмотрел какие-то вакансии, вник в них и собираешься сесть в офис на следующие N лет
https://www.youtube.com/watch?v=8X69_42Mj-g
Тебя забыл спросить, уёбок. Ты тут не у себя дома чтобы командовать. Брысь нахой.
>Под эти задачи С просто не подходит
Под какие именно? По численным методам книги есть, на рисерчгейтах мужики пишут, что С/С++/Фортран - стандартная троица более низкоуровневых языков для физики, один написал, что у них в универе твердотельщики переходят с Фортрана на С.
>Cython и матлаб вариант, если ты уже присмотрел какие-то вакансии, вник в них и собираешься сесть в офис на следующие N лет
Тащемта, я нацеливаюсь на академ-карьеру, даже в случае эмиграции. Просто погромирование мне особо и не интересно, тот же Пайтон я использую в основном для анализа экспериментов и постройки графиков (может еще вкачусь в машинное обучение, тоже сейчас используется в науке и технике).
Тогда почему я при рекурсивном решении ловлю stack overflow, если это так нативно должно быть?
Дебил, такие задачи решает раздел математики перечислительная комбинаторика. Решений подобных задач существует уже масса. Почти все они сводятся к рекурсии. Хотя, кому я это объясняю...
Эту задачу в принципе можно решить на бумажке, на бумажке подобрать какое-нибудь решение. Скорее всего и предполагалось, что на бумаге решать будут.
А в целом не понятно, что они называют перестановкой мешков.
Всего существует две пары симметричных решений
(2, 7, 8, 1, 5, 6, 3, 9, 4)
(3, 5, 8, 1, 7, 4, 2, 9, 6)
(4, 3, 9, 1, 5, 6, 7, 8, 2)
(6, 2, 9, 1, 7, 4, 5, 8, 3)
, полный перебор это 362880 вариантов (9!), даже желания в такой ситуации нет заморачиваться на более умные варианты.
"умный" вариант в таких задачках обычно сводиться к тому что можно доказать положение пары чисел, ну например у тебя всегда 1 на одном месте, потому что произведения дают не больше двух сотен, это уже 8! - 40 тысяч вариантов, так что да, умничать вообще не тянет.
Непонятно как измеряется тяжесть перестановок.
Например самый левый мешок тащить на место самого дальнего явно тяжелее, чем поменять любые две соседние пары мешков, однако же по кривому тексту задачи выходит не так.
Ну вот о том и речь, что дольше заморачиваться и уродовать код, чем перебрать.
Вот если на бумажке решать, то очевидно, что 5 не может быть последней цифрой в числе, может быть только второй в двухразрядном или трёхразрядном.
Очевидно, что 1 может быть только старшим или средним разрядом трёхзначного числа.
Очевидно, что трёхразрядное число чётное.
Ну и ещё ряд ограничений можно быстро вывести. Примерно так на бумаге все эти варианты разными переборами и решаются. Помню много подобных развлекательных задачек из детства.
Но на компьютере каждое такое ограничение надо отдельно кодировать, что уже глуповато смотрится.
Рекурсивное решение в принципе может работать быстро, потому что можно автоматом отсекать огромные ненужные ветви, в принципе было бы оправдано, если бы задача была не 9!, а 16! например.
Но морально тяжело придумывать что-то умное, когда в лоб работает за доли секунды. Ну будет работать не 0.1 секунды, а 0.001, какая разница?
Короче в Линуксе когда вводишь прогу ls и кучу опции типа -lslslllslsllaallRSss лишние опции отбрасываются остаются только -lsaRS вот я думаю как мне убрать дублирующиеся опции?
Ну можешь писать структу или ассоциативный массив какой-нибудь
Options options = {recursive: false, colored: false}
for (int i = 0;argv...) {
switch argv[i
case "r"
options.recursive = true
case "c"
options.colored = true
}
Тут программистский интерес только если написать решатель таких задач, который сам будет выводить и доказывать такие ограничения.
>что они называют перестановкой мешков.
Я думаю что одновременно можно только два числа менять местами,
тут не нужен полный перебор, от начальной комбинации надо идти, и найти такую к которой ведет меньшее число шагов.
getopt/getopt_long в помощь наверное, если тебе это нужно
Потому что в си есть хоть какая-то модульность (можно использовать библиотеку скомпилированную другим компилятором) и её можно приклеить к любому другому языку в отличие от C++, для C++ ты все библиотеки должен собирать сам
С написан на С++
Я понимаю о чём ты говоришь, но ты несёшь какую-то дичь.
Именно что сишный объектный код легко линкуется со всем чем можно. Соответственно, функцию, написанную на Си, легко вызвать отовсюду.
Вызвать С++ функцию из Си ты скорее всего не сможешь. Во всяком случае без правки руками промежуточного asm и ручного name mangling. Еслм очень захотеть, то можно, но дорого и неуниверсально. Я бы смог, но не вижу в этом смысла - гораздо проще объявить функцию как extern "C" и тогда ты без проблем сможешь вызвать её из Си.
>гораздо проще объявить функцию как extern "C" и тогда ты без проблем сможешь вызвать её из Си.
Угу. Но там один такой жЫрный нюанс. Я эксперементировал с линковой С и С++ и обнаружил что если к Си проекту линковать библиотеку, где используются статические классы с конструкторами, то эти конструкторы не вызываются. Если С++ библиотека использует статические объекты с конструкторами, то эти объекты не будут проинициализированы. И с большой вероятностью программа упадёт при вызове функций из этой библиотеки.
Пошел ты нахуй, ЖСор, я ANSI C продюссер.
Из JS/Smoothie-треда.
Та сука, ебанная макака, сожрала все звезды блядь!
Тут ты прав. Но с одним но - этот подводный камень довольно известный. И фиксится тем, что нужно файл где имеется main() функция собрать С++ компилятором.
В стандарте C нет ABI, что ты несешь? Ну ка слинкуй виндовую DLL с линуксовым .so
Оцени расход стека в своей задаче, академик. Сравни с размером стека в своей системе.
Чем мешают?
Звучит как bad practice, лучше падать с ошибкой, ведь скорее всего это опечатка типа rm rf
Естественно на бумаге, это из журнала 1938 года.
Прикол в том, что меняя местами первые же два мешка (7 и 2) ты получаешь как бы подсказку к дальнейшим действиям, т.к. произведение - 156 похоже на число в центре.
>>69449
Никак, это ты себе надумал уже.
>>69186
Это задача на перебор всех вариантов (мутаций), классика программирования. Ну, если решать брутфорсов, а по-другому и не надо, если у тебя есть компьютер.
Я решил не сам, к сожалению, спиздив на форуме часть кода для перебора всех вариантов. На моём руйзене за 0.26 секунды перебирает.
Какой же ты аутист, любо дорого смотреть.
Сукапиздец. Да ты же чернорабочий от программирования.
На крестах решается где то строк в десять, т.к. есть std::next_permutation искаропки.
Весь тред борщём зальешь.
Вот сука, опять си у крестов соснули!
Как что то хорошее. Ждать по минуте загрузку страницы, по 5-10 минут 1 трек в мп3 хуевого качества. Месяц качать 1 исоху и то если у какого провайдера халявные тарифы с халявными часами есть.
Спектрумофаги тоже при малейшей возможности допаивали 128к + бетадиск и забывали про мафон как про страшный сон, а то и вовсе выкидывали к хуям свой спек ради самой сраной 286 списанной с пожелтевшим пластиком и в чужих засохших соплях.
>Месяц качать 1 исоху
Что еще спизданешь. Я качал за месяц несколько исох для дримкаста. Со скоростью вообще не проблма, проблема была в цене за время соединения.
Но возвращаясь к видео. Что особенного в загрузке через звук? Тогда все компьютеры писали и читали со звуковых носителей, да и интернет тоже через диалап звуком. Восхищаться таким будет только тупорылое зумерье без мозгов.
Единственное особенное, что у этого хуя есть доступ к писалке винила. Вот лучше бы покахзал этот станок, чем банальную хуету.
>Тогда все компьютеры писали и читали со звуковых носителей, да и интернет тоже через диалап звуком. Восхищаться таким будет только тупорылое зумерье без мозгов.
Я помню по радио передавали звуком игори и программы, я вот этим до сих пор восхищаюсь.
У тебя очень слабы видимо познания в низком уровне. Даже со своими я не вижу ничего охуенного, а только кучу гемороя, наихуевшейшую скорость и ощущение облома, если кто то пернул в эфир во время передачи.
В этой хуйне нет ничего сложного вообще, даже матана никакого ненужно.
Что бы что? Передатчик перерисовать с книжки и сделать?
Тебе не разработать новый принцип с нуля нужен, а воспроизвести под себя, 99% конструкторских формул в электронике ни содержат ничего за рамками школьной программы.
Есть у кого опыт самостоятельного написания сетевого стека языка? В языке который я хочу использовать, из сетевого стека только socket api. Хочу навернуть поверх что нибудь чтобы можно было удобно писать для веба. Как пример посмотрел сорцы пакета /net в Golang. Код на Go вроде легко читается и сорцы с комментариями. Литературу бы по реализации сетевых протоколов. Кто нибудь знает такую? Хз как гуглить
В смысле? Вроде речь как раз шла про передачу в радиоэфире.
Wat? По твоему веб работает не на сетевых протоколах? Сетевые протоколы для веба не на сокетах строятся? Опять кукареки лезут туда в чем ничего не понимают.
>Литературу бы по реализации сетевых протоколов. Кто нибудь знает такую?
https://tools.ietf.org/rfc/index
Неистово двачую, реально лучший сайт когда хочешь без смузи и ебли в жoпу почитать как работает какой-то smtp/socks/etc протокол.
>Опять кукареки лезут туда в чем ничего не понимают.
Кукарек тебя делал.
Вы, пидоры, своими поделками поверх HTTP уже весь Интернет засрали.
По-моему ты не хочешь что-то писать, а хочешь поговорить о том, чтобы что-то написать. Тонны материалов по этому поводу и реализаций протоколов на разных языках. Бери конкретный протокол и разбирайся с ним.
Спецификации есть, разборы того, как писать есть.
В принципе для самообразования можно.
Хочет писать для WEBа, но не поверх HTTP.
Ты даже не понимаешь чего ты хочешь.
Тебе наверняка первый ответил дядя, который копался в заголовках IP и TCP. Ты этого не осознал и начал на него наезжать. Ты точно не быдло?
Короче, пиздуй читать что такое HTTP - https://tools.ietf.org/html/rfc2616
и что такое HTTPS - https://tools.ietf.org/html/rfc2660
что такое TLS - https://tools.ietf.org/html/rfc8446
И пару дней не пиши сюда, пока все не забудут какой ты идиот.
Он хотел ссылок на что-то разжёванное по разным протоколам каким-нибудь. Ну есть там ещё для доменных имён, всякие socks5 и что-нибудь ещё, что с веб связано, но не http при этом.
Но я думаю так, если чел хочет потрепаться, то он пишет на двач или ещё куда. Если хочет именно делать, он пишет на гугл или аналоги. Всё просто.
Когда что-то конкретно не понятно, тогда другая история.
Материалов реально как грязи, там сначала надо понять, как интернет вообще работает, какого рода протоколы для чего используются.
Анон, как постоянно считывать эти быстро обновляемые данные? Тупо вызывать read() для этого файлового дескриптора? Или есть в ОС какие-то следящие механизмы что-ли kpoll? Что требуется от драйвера? В нем реализованы функции чтения, записи, aio_read/write, seek.
Нахуй мне твой текстовый уебищный http? Только долбоебы поверх http делают протоколы. MQTT, websocket - намного более продвинутые, более легковесные и производительные, и легче в реализации.
Устройство должно сигналить для poll/select, когда в нем меняется содержимое. Скорее всего, это не сделано, остаётся перечитывать.
Либо делать polling через select/poll/epoll, если в char dev в структуре file_operations имеется обработчик для poll. Либо через сигналы делать и SIGIO, опять же если в char dev в той же структуре есть обработчик для fasync. Но с сигналами заебешься.
>Только долбоебы поверх http делают протоколы. MQTT, websocket - намного более продвинутые,
websocket работает поверх HTTP
>websocket работает поверх HTTP
Чиво блядь? Может у долбоебов и так конечно.
WebSocket — протокол связи поверх TCP-соединения
https://ru.wikipedia.org/wiki/WebSocket
В принципе он прав, WebSocket это не http, он мимикрирует под http, принимается вебсервером как http, то потом включается в действие опция upgrade и протокол подменяется.
Классический http работает по схеме запрос-ответ, другого не предусматривает, а вебсокеты двунаправленные, и с дополнительными субпротоколами ещё. При этом какие-то специфичные фишки классического http в вебсокетах не доступны.
Можно это назвать расширением HTTP (по аналогии с HTTP2), можно назвать другим протоколом. Правильнее всё-таки другим протоколом называть.
Есть масса либ, которые реализуют вебсокеты, но не поддерживают ничего другого из http. В nginx приходится немного пританцовывать, чтобы проносить вебсокеты дальше.
Но спор ни о чём на самом деле.
Вопрос не в том как называется, а как работает. TCP бинарный протокол, HTTP текстовый. В примерах видно что данные передаются каким то текстом типа base64, то есть +оверхед по размеру +оверхед по упаковке распаковке. Есть ли там чисто бинарная передача?
Хватит хуйню городить. По вебсокетам можно передавать бинарные данные. Нормальные люди так и делают. Вебсокеты не про текст, а про транспорт.
Я и емейлом могу бинарные данные через base64 передавать, что сказать то хотел?
По хттп происходит хендшейк, который включает соответствующую фичу браузера, дальше он не используется.
Это как ты ембеддишь swf в хтмл и дальше работает отдельный плагин, другая технология, встроенная в браузер.
Ну так хули ты говоришь про оверхед на декодирование? Его же в любом случае не избежать.
Подскажи почему мне FIFO не создать?
https://it.wikireading.ru/14107
Все большую и большую популярность в России и во всем мире завоевывает Linux — UNIX-подобная операционная система для IBM-совместимых персональных компьютеров.
Какого года книга?
2006 года.
mknode отменили ?
разбираюсь как им пользоваться :)
Выведи его значение в тот же самый printf и смотри в интернет что означает код ошибки.
Загляни вот сюда - https://man7.org/linux/man-pages/man3/errno.3.html
спасибо, с помощью ерна определил not permitted. Перенес свой файл в другой каталог - все заработало, как оказалось у меня в расшареной папке фифо не создается.
Молодец. Без иронии говорю. Именно так и должен решить проблему настоящий инженер. И объяснить другим. И без срачей.
Другим наука.
Это копия, сохраненная 24 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.