LINUX.ORG.RU

чистый Си

 


2

3

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

веб - curl
криптография - openssl
json - json-c
html - libhubbub (html5)

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

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

Пересел из микроконтроллеров

Если пересел, то почему а) ты все еще не знаешь Си на уровне, позволяющем не задавать таких вопросов и б) на кой тебе сдался чистый Си, если это не про мк

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

Это ты про Царя?

Нет, про u0atgKIRznY5 или его очередную реинкарнацию, насколько я помню он выносил мозг как разбирать HTTP на Си и не хотел читать RFC.

vvn_black ★★★★★
()

а куки проще всего слать через curl: https://curl.haxx.se/libcurl/c/cookie_interface.html

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

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

все верно ну а в тех мк в которых есть сокеты, их уже одноплатниками зовут, спасибо, буду разбираться

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

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

в Linux сокеты реализованы через TCP/IP. TCP/IP в простом варианте можно реализовать и на контроллере. тем более, что есть microchip'ы со встроенным ethernet'ом, например.

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

в Linux сокеты реализованы через TCP/IP.

Нет, ну серьёзно? Как только мне начало казаться, что моё мнение о твоей компетенции не могло упасть ещё ниже, ты выдаёшь вот такое. За что ты так со мной?

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

Почему ты не считаешь размер вм, но при этом сишный бинарник должен быть статическим?

Ну хорошо, «hello world» на Python / Lua будет весить 22кб. Как тебе такое, Илон Маск?

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

ну извини, что ранила твою детскую психику. просто позикс не требует реализации именно через TCP/IP. unix сокеты - не единственная возможная реализация.

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

ну, это тоже сокеты. но мы тут про веб говорим, а не про IPC.

просто TC поднял вопрос о реализации веб-сокетов на микроконтроллерах. это вполне реализуемо на достаточно мощных контроллерах.

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

я именно это и сказала. это весьма размытая позиксовская абстракция. но в применении к вебу см. коммент выше.

но, конечно, вам никто не запрещает грузить куки через IPC :)

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

ну, это тоже сокеты. но мы тут про веб говорим, а не про IPC.

А какая разница, лол? Сокеты не реализованы через TCP/IP, сокеты это сокеты. А во что там твой sendto дальше транслируется — вопрос протокола :)

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

ты сам топик-то прочитай уже. сразу станет проще ориентироваться в контексте.

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

ну, это точно не IPC. а веб - понятие растяжимое. в широком смысле можно хоть на CAN его делать. наверное, можно сделать какие-то свои сокеты. но таки наиболее распространён TCP/IP.

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

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

ну, это точно не IPC. а веб - понятие растяжимое. в широком смысле можно хоть на CAN его делать. наверное, можно сделать какие-то свои сокеты. но таки наиболее распространён TCP/IP.

Ненене. Веб-сокеты — отдельный протокол со своим RFC. Сирисли.

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

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

Так мы про линукс тут вроде говорили.

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

Я мб чего-то не понимаю, но с gcc -static у меня собирается бинарник, который ldd пруфит что статический. Правда весит он >800кб.

Динамически весий 8кб, не понял смысла прибавления к нему размела glibc.

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

но таки наиболее распространён TCP/IP.

TCP/IP ламерский термин

есть IPv4, IPv6, есть UDP и TCP, причём TCP не везде реализован, как необязательный для мелкой эмбедщины

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

Ага. Только ты статический бинарник в системе с другой версией glibc можешь не запустить. Glibc любит делать dlopen().

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

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

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

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

Я тоже пишу сетевые приложухи. Только вот если это не какой-нибудь реплицируемый s3-кеш, от которого требуется упомрачительная скорость передачи данных, то зачем там C? Есть perl и Go. И даже в случае high performance, я уже давно засматриваюсь на Rust.

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

слушай, ну ты мне это будешь рассказывать? не надо. я пишу так, потому что современный веб, в том смысле, как мы его знаем - это в основном TCP/IP. куки в UDP? наверное, можно. есть ещё промежуточные варианты SCTP и DCCP. и кошмар провайдеров - гугловский QUIC :)

но всё же обычный TCP/IP каноничен. и куки обычно в HTTP поверх TCP/IP.

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

при чём тут веб, когда в интернете кто-то неправ насчёт сокетов!

в Linux сокеты реализованы через TCP/IP.

это тисипиайпи реализован в линуксе (в смысле интерфейс пользовательских программ) через сокеты, а не наоборот!

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

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

перл хорош для регекспов и локальных скриптов. го, имхо, просто не нужен. ну, пока не пройдёт лет десять и они там не определятся с реализацией.

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

перл жрёт слишком дофига памяти. таков уж он есть. и он по сравнению с сишечкой медленный.

Если я его в urxvt не замечаю, я его нигде не замечу. Опять же, при условии, что мы не миллионами запросы делаем.

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

Один из самых популярных языков в мире. Вылезай из 2007 года.

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

нет. в лине сетевой стек реализован в ядре. а сокеты - это просто просто абстракция для передачи данных между процессами. в зависимости от того, где запущены процессы, это либо TCP/IP, либо IPC (пайпы, либо неименованные пайпы aka юникс сокеты). UDP-сокеты тоже бывают, но HTTP-сайтов с UDP и куками я пока не видела.

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

Опять же, при условии, что мы не миллионами запросы делаем.

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

Один из самых популярных языков в мире.

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

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

зависимости от того, где запущены процессы, это либо TCP/IP, либо IPC (пайпы, либо неименованные пайпы aka юникс сокеты).

а других сокетов в твоём мире не существует штоле, raw сокеты например, IPX (который давно закопали, но тем не менее)

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

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

О чем и речь. Если ты infiniband пердолишь, то так перл не засунешь. Но тс явно не пытается выжать все из линка.

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

Ну это илитизм какой-то. Там, где пишут на го, C просто не нужен. Не нужна такая скорость работы. А библиотек больше.

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

пайпы, либо неименованные пайпы aka юникс сокеты

Что за бред я только что прочитал? Pipe и Unix domain socket — разные вещи. И оба могут быть именованным или нет. UDS еще может быть абстрактным.

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

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

но топик не про это.

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

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

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

просто то и другое - сокеты.

Эээээ... Нет, не сокеты. По крайней мере пайп :) Давай ты перестанешь позориться, почитаешь pipe(7), socket(7) и больше не будешь такой чуши пороть?

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

пока не пройдёт лет десять и они там не определятся с реализацией

C выхода 1.0 прошло почти 7 лет (в марте), с тех пор всё зафиксировано и ничего не сломали.

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

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

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

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