Доброго времени суток. Я начинающий программист с диким желанием получить опыт и навыки. Навык программирования на С у меня достаточно низкий (или просто так кажется) и мне хотелось бы его развить. Можете посоветовать какую нибудь задачу из разряда системного программирования в Linux? Можно с примесью криптографии так как именно ей и ИБ собираюсь заниматься в дальнейшем. Заранее спасибо.
просто читай исходники ядра с как говорится Entry. Мне помогло. Правда я читал OpenBSD сорцы, в итоге получилось добавить в крипто систему ядра алго шифрования ГОСТ-89
Наверное еще рано. Решите, что нибудь из ряда прикладных задач. Например, разработайте многопоточный параллельный сервер, и протестируйте его параллельную работу с помощью нескольких клиентов. В качестве базы, возьмите примеры из замечательной книги "Разработка сетевых приложений типа клиент/сервер для Linux/Posix" Эта книга очень полезная, т.к. в ней представлено много практических примеров, а не только сухая теория.
Если вы любите ИБ, то Вам будет полезно знать как функционирует клинт-серверное ПО, что такое тупиковые ситуации и т.д.
yaku_toi По системному программированию под Linux, опять же в контексте сетей, могу порекомендовать книгу "The Linux Networking Architecture- Design and Implementation of Network Protocols in the Linux Kernel". Книгу эту найти довольно не просто в интернете, но можно, она на английском. Эта книга рассчитана как минимум на специалиста в области Computer Science. Можете просто скачать её, с той целью, чтобы оценить уровень необходимый для разработки системного ПО (в книге рассматривается разработка новых сетевых протоколов). Когда Вы этого уровня достигните, то можете смело приступать. А пока имеет смысл тренироваться на прикладных задачах. Желаю удачи.
Nafanya Это системный уровень. Прикладное программирование -- это рисование окошек. Не только окошки, конечно же, но как правило. Вы путаете деления kernel-space vs. user-space; и system coding vs. application coding. Это достаточно распространённая путаница, поскольку при переводе на русский, "user space code" превращается в "прикладной код", при тупом (не учитывающем контекста) переводе обратно получаем "application code". Но вообще-то, system code -- это не то же самое, что и kernel code.
r90 Почему системный то? Если разрабатывается протокол 7-го уровня модели OSI, то бишь прикладной протокол, который клиент и сервер будет использовать для общения. И при чем здесь системное программирование? Системный уровень - это: 1) Memory managment 2) Process managment 3) Network subsystem 4) Filesystems 5) Device drivers При системном программировании, разработку можно отнести к какому-либо из 5-ти перечисленных классов. Из вики: Систе́мное програ́ммное обеспече́ние — это комплекс программ, которые обеспечивают эффективное управление компонентами вычислительной системы, такими как процессор, оперативная память, каналы ввода-вывода, сетевое оборудование, выступая как «межслойный интерфейс» с одной стороны которого аппаратура, а с другой приложения пользователя. Сервер с клиентом никак на "межслойный интерфейс" не похожи.
yaku_toi Попробуй написать фаервол и низкоуровневый сниффер..а также их обход. Заодно попробуй с протоколом tcp разобраться. Из книг, почитай "Linux. Сетевая архитектура" она на русском... И разбирайся...разбираться в этом деле очень долго. Правда долго. Т.к. в разных версиях ядра, реализация сетевого стека отличается. ((((... Насчёт криптографии, именно в ядре. Можешь посмотреть их реализацию в исходниках ядра, Однако , когда я их смотрел.. было ни черта не понятно. Проще самому разобраться в определённом алгоритме, и самому его реализовать на СИ..и не парить себе мозг.