Как я практикую программирование Unix в C?

После пяти лет профессионального Java (и до меньшей степени, Python) программирование и медленно чувство, что мое образование информатики убегает, я решил, что хотел расширить свои горизонты / общая полноценность к миру и сделать что-то, что чувствует больше (мне) как, я действительно имею влияние по машине. Я принял решение изучить C и Unix, программируя, так как я чувствую, что это - то, где многие самые интересные проблемы.

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

С этой целью я запустил с K&R, который был большим ресурсом частично из-за распространения упражнений всюду по каждой главе. После этого я шел дальше к Компьютерным системам: Перспектива Программиста, сопровождаемая десятью главами Усовершенствованного Программирования в Среде Unix. Когда я буду сделан с этой книгой, я считаю Сетевое программирование Unix.

То, что я пропускаю в книгах Stevens, является отсутствием проблем программирования; они главным образом функциональность документа и обеспечивают примеры с несколькими вопросами о конце главы после. Я чувствую, что извлек бы выгоду намного больше из того, чтобы быть оспариваемым для использования знания в каждой главе а-ля K&R. Я мог записать некоторую тестовую программу для каждой функции, но это - менее желательный метод как (1) я, вероятно, был бы менее мотивирован, чем если бы я принимал некоторый внешний вызов и (2) я буду естественно только думать для использования функции в путях, которые уже произошли со мной.

Так, я хотел бы надеть некоторые рекомендации, как практиковать. Очевидно, мой предпочтительный вариант состоял бы в том, чтобы найти некоторый ресурс, который имеет проблемы программирования Unix. Я также рассмотрел открытие и попытку способствовать некоторому проекту открытого исходного кода C, но это является немного пугающим, поскольку были бы немного служебные в обучении использовать программное обеспечение, затем изучив кодовую базу. Единственный проект открытого исходного кода C я могу думать об этом, я использую, регулярно Python, и я не уверен, как легкий, который должен был бы начать на.

Тем не менее я открыт для всех видов предложений, поскольку существуют вероятные вещи, о которых я даже не думал.

48
задан 3 revs, 2 users 79% 29 April 2018 в 15:23
поделиться

6 ответов

Переосмыслите множество основных утилит Unix. Большинство из них были (и все еще остаются) написаны на языке C, поэтому они являются хорошим способом начать изучение. В зависимости от ваших навыков, выберите более сложные или более простые утилиты для копирования.

Попробуйте написать свой собственный malloc. Вы узнаете много нового о Unix, а также много нового о программировании на C.

Найдите в Google курсы по операционным системам для информатики и сделайте там проекты. Многие школы размещают эти проекты на публичных сайтах, так что вы сможете получить все, что вам нужно. Вот ссылка на сайт Purdue. Попробуйте проект "Оболочка"; это было сложно, но очень познавательно.

28
ответ дан 26 November 2019 в 19:05
поделиться

Вот несколько сообщений на stackoverflow, в которых обсуждаются книги по программированию на C/Unix. Их главная претензия на славу - обширная ссылка на другие ресурсы.

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

Изучение XLib или Win32 GUI программирования на C, вероятно, менее полезно, поскольку почти все, что угодно, лучше, чем C для GUI программирования, и обернуть основной движок C другим языком обычно намного проще - если только вы не очень озабочены скоростью. Для начала сконцентрируйтесь на "системном" программировании - именно в этом случае вы с наибольшей вероятностью получите реальную отдачу от C. Изучите, как работает интерфейс C одного из скриптовых языков, таких как Tcl или Python.

Написание битового кода с большим количеством указателей (например, разбор сетевых пакетов или интерпретация протокола) или серверных элементов, использующих сокеты, поможет вам освоить основные возможности языка Си. Если у вас есть книги по WRS, попробуйте заставить работать pthreads (IIRC UNP2 имеет большой раздел о pThreads). Для контраста напишите что-нибудь, использующее неблокирующий ввод-вывод. Эти вещи - родная территория C, и вы получите хорошие рабочие знания C, делая это. Просмотрите RFC, чтобы найти идеи сетевых протоколов для реализации.

5
ответ дан 26 November 2019 в 19:05
поделиться

Вы можете попробовать проработать все примеры в книге Software Tools (Amazon). Большая часть из них довольно прозаична (выравнивание текста вправо, де-табификация и т.д.), но это отличное введение в философию Unix и основы программирования на C.

1
ответ дан 26 November 2019 в 19:05
поделиться

Лучший способ закрепить полученные знания - это практика. Поэтому просто выберите интересующее вас приложение и начните его разрабатывать (например, простое сетевое приложение клиент/сервер).

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

0
ответ дан 26 November 2019 в 19:05
поделиться

Напишите веб-сервер.

  • Сделайте его многопоточным.

  • Поддерживает ли он новый язык сценариев, который вы разрабатываете (например, PHP и т. Д.).

  • Разрешить загрузку от авторизованных пользователей.

  • Напишите плагин для вашего любимого инструмента (например, интегрируйте с SVN, чтобы дать веб-просмотр).

0
ответ дан 26 November 2019 в 19:05
поделиться

Вы открыты для предложений по книгам? Хотя книга Мориса Баха «Дизайн операционной системы Unix» немного устарела (где «немного», возможно, сильно преуменьшает) - отличная книга. Он находится рядом с K&R на вашей книжной полке.

1
ответ дан 26 November 2019 в 19:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: