Подтвердить что ты не робот

Как практиковать Unix-программирование в C?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

Это довольно интересно. Поскольку мы знаем, что Unix разработан с использованием языка C, это может быть нелегко изучить. Если вы используете ОС Windows, вы можете использовать приложение "Службы Windows для Unix", чтобы практиковать ваши программы. Если вы используете unix, мы можем использовать редакторы, такие как vi.

Ответ 6

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

Ответ 7

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

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

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

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

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

Ответ 8

Я бы порекомендовал одну вещь высоко.

Попробуйте перезаписать все обычные инструменты командной строки Linux, такие как ls, mkdir, cd и т.д.

Вы получите много знаний о программировании и Linux одновременно.

Выберите команды из самых простых, скажем "время" и проделайте все до более сложных.