LINUX.ORG.RU

чистый Си

 


2

3

Всем добра. Учусь программированию под линукс, знаю что нет ничего лучше чем практика. Пересел из микроконтроллеров, поэтому практически все нужно осваивать заново. Много гуглил но так и не смог найти примеры работы как загрузить веб контент, json или код html, и cookie на чистом си под линукс. а также как отправлять cookie. Киньте пример или ссылку на него, только рабочий пример пожалуйста, так как для меня это новые ворота.

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

Redis, Memcached? Всё ж придумали до нас

А смысл ему данные туда-сюда гонять? К тому же, еще непонятно, что быстрее — получить данные из memcached, или из page cache.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)
Ответ на: комментарий от kirk_johnson

ну я хотел было сказать, что чтобы сэкономить своё время, не возиться с велосипедами и всё такое. но потом подумал, что собираюсь это сказать в треде про веб на сях и да, неуместно, согласен.

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

Ну демон, держащий в голове префиксное дерево, пишется примерно за час. Но тут сама задача велосипедная :)

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

вот это, да :)

и я сама свидетель этих багов и кучи проблем, которые из этого вылились. поэтому - ну его нафиг. хомячки пусть остаются хомячками и юзают любые песочницы. они просто не могут в другое, у них мозгов не хватает. но для тех, кто может писать код, есть нормальные языки программирования.

Iron_Bug ★★★★★
()
Ответ на: И как это зависит от языка? от Moisha_Liberman

Проблемы с памятью, на мой взгляд, это как дизентирия. Болезнь грязных рук.

это в цитатник надо. увы, у некоторых не хватает мозга, чтобы это осознать, и они обвиняют в этом C, а не собственную ограниченность.

вообще, спасибо за комменты по делу. на ЛОРе это редкость.

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

я если обнаружу ошибку в библиотеке, которую я использую, - сообщу разработчикам. и если смогу, сразу предложу фикс. а ошибку я обнаружу, потому что свой софт я прогоняю через все проверки и проверка использования памяти - в первую очередь. так что то, что в курле где-то были ошибки памяти - это лишь значит, что эти функции никогда не использовались. я как-то нашла ошибку в uthash. этой библиотеке сто лет в обед. в одной функции была ошибка. и никто её не находил, пока я не заюзала функцию и не стала проверять память. так что проблемы багов такого уровня - это не проблемы, на самом деле. проблемы - это когда какая-то реализация открывает бэкдоры для внешней атаки, например. а такое бывает очень редко.

Iron_Bug ★★★★★
()
Ответ на: Не вопрос. от Moisha_Liberman

Вроде, говорят, даже есть русский перевод, но я за него ни чего не скажу, не видел.

Есть (магазин изд-ва Питер). Да, толковая книжка и перевод неплохой. Купил, читал.

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

есть локальный ползатель по документации

man cargo doc

...Который ещё и не сортирует принудительно по алфавиту, в отличие от go doc.

~~@~~

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

Он генерит html, который нужно браузером насиловать. Я хочу в стиле perldoc или man, чтобы можно было удобно в vim интегрировать.

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

веб контент, json или код html, и cookie на чистом си под линукс

Кстати, это ведь тематика, которая подразумевает серьёзную работу со строками. Ты как будешь с ними работать? В традициях чистого си — через strstr, strcat и всё такое? Или нагородишь каких-нибудь абстракций вроде GString?

Если второе — то это, как тут пошутили выше, уже «грязный Си». Если первое — тебе ведь придётся не только все эти strcat лесенкой городить, придётся ещё на каждый чих проверять, влезает ли строка в выделенные под неё переменные, не родил ли ты уязвимость.

Готов этим заниматься? Может, таки взять чуточку более высокоуровневый инструмент, кресты те же? Нет, я тебя не отговариваю, если не бросишь и напишешь что-то нормальное и не решето — молодец.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Да нет там на самом деле ничего сложного, если не пытаться сделать «универсальное решение».

Для частных случаев все решаемо легко и непринужденно. И строки нормально парсятся, разве что не забывать после strdup/malloc втыкать free... А можно и на статических буферах делать. 10 буферов по килобайту за глаза хватит..

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

это к вопросу о твоём личном, частном мнении о «бажных» инструментах. у меня оно другое. у меня мнение, что го - сырое, глючное и дико тормозное поделие для хомячков.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от hobbit

что-то ты сочиняешь. нет никаких проблем с работой со строками. текст - это работа с указателями, буферы и пулы. ничего сложного. стандартные решения.

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

это к вопросу о твоём личном, частном мнении о «бажных» инструментах. у меня оно другое. у меня мнение, что го - сырое, глючное и дико тормозное поделие для хомячков.

Сырое, глючное поделие — go. Но баги, порча памяти и чтения за границей массива (потенциальный SIGSEGV) почему-то в curl. Ты не видишь тут противоречия?

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

почему-то в curl

А почему именно curl? Это про любую сишную либу можно сказать. Взять тот же libxml2. Там changelog просто сказка. double free на double free.

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

А почему именно curl?

Ну мы тут curl обсуждаем, потому что это чуть ли не единственная живая сишная либа для HTTP. И у Iron_Bug бомбит от того, что баги в сишной либе, а считать бажным языком нужно Go.

Это про любую сишную либу можно сказать. Взять тот же libxml2. Там changelog просто сказка. double free на double free.

Парни из OpenBSD творят чудеса в своих походах по минному полю. В релизных версиях не то чтобы много такого рода проблем. Есть, конечно, но не так много.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

а считать бажным языком нужно Go.

Сишник - это диагноз.

Парни из OpenBSD творят чудеса в своих походах по минному полю.

Боюсь даже представить, насколько сильно это бьёт по скорости разработки.

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

Сишник - это диагноз.

Ну, я до сих пор пишу всякие сложные штуки, требующие какой-никакой скорости, на C. Я все хочу слезть на Rust, но их долгая война с асинхронкой меня немного пугает. Хотя вот tokio наконец-то избавился от шареного между тредами event loop'а. Я все надеюсь, что сейчас придет async/await, и жизнь станет мягкой и шелковистой.

Боюсь даже представить, насколько сильно это бьёт по скорости разработки.

Да не то чтобы сильно, на самом деле. Сильнее бьет то, что их мало.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 3)
Ответ на: комментарий от kirk_johnson

потому что в C если я найду ошибку в библиотеке - я её исправлю. а если я использую библиотеку и в ней ошибка, то я её обязательно найду, так как тестирую свой софт. а в го хомячки просто страдают и ничего сделать не могут с багами. я это сама видела. и тормоза го тоже видела. так что не надо тут заливать. го - бажное тормозное УГ. оно недавно появилось и исчезнет. таких язычков навалом было. и все они канули в Лету. а на C пишут уже более 30 лет и всё работает.

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

потому что в C если я найду ошибку в библиотеке - я её исправлю. а если я использую библиотеку и в ней ошибка, то я её обязательно найду, так как тестирую свой софт.

А тестировать софт на Go тебе мешает?..

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

Они их репортят, а разработчики фиксят. Или юзеры сами фиксят, и постят PR на Github. Все как всегда.

я это сама видела.

Я видел, как страдали и ничего не могли сделать с багами программисты на C. Все, закапываем? Я ожидаю пассажа в духе «ПРОГРАММИСТЫ ПЛОХИЕ БЫЛИ». Да, были. Так и программисты на Go у тебя тоже, скорее всего, были такие же. Дело в программистах, а не в языке. Править баги можно в софте на любом языке, инфа сотка.

и тормоза го тоже видела. так что не надо тут заливать. го - бажное тормозное УГ.

Важна область применения. Если делать сетевую хреновину, которая должна выжрать 400G через InfiniBand, обработать данные и послать их через NTB на другие серваки не поперхнувшись — да, использовать Go несколько наивно. Если тебе нужно REST API сделать — почему нет?

оно недавно появилось и исчезнет.

Языку десять лет. На нем написано дохрена полезного софта.

таких язычков навалом было. и все они канули в Лету. а на C пишут уже более 30 лет и всё работает.

Много на чем пишут. На Java пишут 23 года. Дальше-то что? Вот честно — лучше Go, чем Java.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Ну так в Си асинхронности нет в принципе. Так что хз.

В нем есть чудесный libev, в котором есть все, что мне когда-либо нужно было: таймеры, сигналы, поллинг fd и ивент луп без блокировок. С минимальными усилиями (ладно, у меня просто был чудеснейший QA, который самоотверженно все тестировал) я писал штуковины, которые мало ели, быстро работали, нравились админам в обслуживании и не требовали много сил для отладки. Да, автор наркоман и держит исходники с CVS. Да, callback hell. Но багов я с ним не ловил.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

на Си есть всё, а чего нету, есть в ассемблере

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

а чего не libevent или libuv

Потому что libev простой, тупой и деревянный. libevent имеет в запасе HTTP, DNS и прочие штуки, которые мне были не нужны. libuv кроссплатформенный, что тоже было не нужно.

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

Страшный же. И дженериков нет. actix-web + diesel всяко лучше и надёжнее.

Надежнее — хз. Я пока не убежден, потому что сам не видел. Код на Go видел. Да, без generic'ов плохо, но ребятки на работе почти все углы обошли через интерфейсы.

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

Ну и да — ничего страшнее реализации TAILQ (sys/queue.h) я в жизни не видел. Ну, не из быдлокода, а из нормально работающих реализаций. Так что если сравнивать вот этот вот и Go — выбор довольно очевидный.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от Harald

ну, более и есть более. даже я на нём больше 30 лет пишу, если считать от момента, когда я начала его изучать, ещё в школе :) тогда он уже более-менее устаканился и был практически такой же, как сейчас. тогда был стандарт C89. то есть, он уже стандартизировался.

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

Хотя нет, видел — uthash.

В котором есть вот такие вот прекрасные комменты в коммитах:

This code is from before my time and I don't exactly understand it, but the intended usage is apparently...

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)
Ответ на: комментарий от casusnur

Спасибо. Заказал книжку. 1.7кг инфы

Я учился собирать свои первые сишные программы под Линукс по книге Марка Митчелла, Джеффри Олдхэма и Алекса Сэмюэла «Программирование для Линукс. Профессиональный подход». От создания своего первого мейкфайла до межпроцессного взаимодействия в сишных программах - всё в этой книге. Издание хоть и давнишнее, но может сгодиться и бесплатно к тому же.

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

Это который hash table на макросах?

Ага. Он хороший, быстрый, но код, как и в любой header-only либе, выглядит, как полусгнивший дрочащий бомж.

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

Не занимайся ерундой, и выучи лучше Go или Python + расширения на Си. Если хочешь для себя выучить приятные языки для домашнего кодинга - это Swift и D. Оба прекрасно работают под Linux.

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

Долгое время считалось, что bit неделим. Но Swift.. Мутирует до неузнаваемости с каждой версией, вечно что-то в нем исправляют, операторы выкидывают, новые добавляют, вместо привычных true&false еще nil существует, для школоты может и удобно, но я привык руками исключения обрабатывать. пиздон тоже не предлагать, знаком немного. по мне так это попытка бейсику ооп прикрутить, да еще и разметка пробелами, дичь вообщем. да я и не совета пришел спрашивать какой язык учить, а как сделать на Си реализацию http. Для бекэнда пойдет и то и другое, а для вычислений не годится.

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

В чём проблема взять кишки nginx/lighttpd и на них уже сверху наклепать свой код? Си, вообще, далеко не лучший для таких вещей язык. Go немного лучше. Не очень понял, что мутирует в Swift, с 1-ой версии там мало что изменилось, ++ выпилили разве что...

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

нельзя на всех языках одинаково хорошо програмить. спец во всем - это муж на час. А тут вроде программисты сидят. Даже хорошие переводчики, которые разговаривают на многих языках, на родном говорят с акцентом и путают слова, это я к тому что раз начал програмить на Сях и асме, то и в будущем планирую пользоваться всеми их преимуществами. А не искать другие языки в надежде что найду тот, который решит все проблемы одной строчкой кода. Ну вот так както..

p.s. свифт, пхп, пайтон, js итд. учил только для того чтобы читать код. писать на нем для меня тяжело и неинтересно. ну в школе еще бейсик с паскалем были, еле их забыл чтобы начать программировать.

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

p.s. свифт, пхп, пайтон, js итд. учил только для того чтобы читать код. писать на нем для меня тяжело и неинтересно.

Просто у тебя профдеформация и ты пытаешься писать на них как на си. Языки с ВМ сделаны для того, чтобы дико угорать по рефлексии и прочим плюшкам управляемого кода. Этого *никак нельзя* сделать на си/плюсах/асм.

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

ошибаетесь, си и асм - те языки, на которых можно сделать абсолютно всё. на них можно сделать например свифт, яву, итд, а наоборот незя (работать будет медленно, если ваще заработает).

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

ошибаетесь, си и асм - те языки, на которых можно сделать абсолютно всё. на них можно сделать например свифт, яву, итд

Но зачем делать свой недовелик, когда всё это уже есть?

наоборот незя (работать будет медленно, если ваще заработает).

Что нельзя? Дёрнуть нативный код?

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

да я топик затеял не для лисапедостроения, а для того чтобы посказали какой лисапед лучше на сях.

насчет нативного кода не понял.

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

да я топик затеял не для лисапедостроения, а для того чтобы посказали какой лисапед лучше на сях.

Так Эдди тебе уже скинул свой фреймворк. И libcurl кинули.

насчет нативного кода не понял.

Где именно? Всякие питоны с жс и явой вполне себе дёргают сишные либы, если надо.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.