Wie lerne ich C-Programmierung und die Grundlagen von Betriebssystemen auf praktische Weise?

Programmiersymbol

Es gibt viele Möglichkeiten lernen zu programmierenEs gibt viele Webseiten mit Tutorials, Codebeispielen usw. Sie können auch eine Vielzahl von Büchern über Programmierung finden, sowohl C als auch viele andere Sprachen. Es gibt auch Online- oder Face-to-Face-Programmierkurse, in denen Sie diese Techniken verstehen können, um Ihre eigene Software von Grund auf neu zu erstellen.

Andererseits gibt es einige physische Trainer mit bestimmten Mikroprozessoren oder Mikrocontrollern, die Sie programmieren können, um diese Kunst fast durch Spielen und Erstellen von Projekten zu erlernen. Ein sehr gutes Beispiel ist der Raspberry Pi selbst, die Parallaz-Boards oder die nationalen Boards, die Sie im MKElectronics Store finden, oder das bekannte Board Arduino, Schutz vor. Wenn Sie sich jedoch mehr auf die Softwareentwicklung konzentrieren möchten, empfehle ich immer dasselbe: Code lesen und ändern.

In diesem Beitrag Ich werde nicht versuchen, Ihnen Programmierkurse zu geben, da es ein Thema ist, das ich für viele Artikel wie diesen erläutern würde die Grundlagen der Programmierung zur fortschrittlichsten Programmierung. Ich möchte Ihnen nur einige Ressourcen oder Möglichkeiten geben, um Ihr Wissen zu stärken. Und ich versichere Ihnen, dass sie sehr effektiv sind. Sie wissen auch, dass Sie mit jeder GNU / Linux-Distribution beginnen können, mit den für die Programmierung erforderlichen Paketen wie einem Texteditor oder einer IDE, auch GCC und GDB, wenn Sie debuggen möchten ... oder auch einige verwenden möchten Verteilung für Programmierer. Ich denke auch, dass Sie diese Art von Werkzeugen, die Ihnen zur Verfügung stehen, bereits kennen oder kennen sollten.

Wie fange ich an?

Quellcode auf dem Bildschirm

Sie können finden Code Ausschnitte im Netzwerk auf Millionen, dh Codefragmente, die für ganz bestimmte Aufgaben verwendet oder geändert werden können. Diese Quellcodes sind die Grundlage für das Lernen, da es sich um sehr grundlegende Funktionen handelt, die Ihnen helfen, die Funktionsweise der Programme zu verstehen, und Sie können einige Parameter ändern, um sie dazu zu bringen, etwas anderes zu tun. Und so fängt es an!

Wenn Sie sich vorwärts bewegen, können Sie hineinspringen Quellcode lesen, die, wenn sie gut kommentiert sind, für Ihr Wissen besonders nahrhaft sind. Leider haben nicht alle Entwickler die gute Angewohnheit, die von ihnen geschriebenen Zeilen zu kommentieren, und in einigen Fällen sind die Kommentare selbst für erfahrene Leute selten oder verwirrend. Aber zum Glück haben wir einen großen Teil der Community, der ihre Projekte recht gut kommentiert.

Plattformen, auf denen Software-Code wie GitHubZum Beispiel, obwohl es noch viel mehr gibt, sind sie sehr wichtige Quellen der Weisheit. Tatsächlich empfehle ich, dass Sie, sobald Sie sich mit Snippets oder Ihren kleinen Programmen vertraut gemacht haben, zu diesen Plattformtypen wechseln und auf den Quellcode einfacher Projekte zugreifen. Sie können die Filter- und Suchmaschinenfunktionen verwenden, um bestimmten Code in a zu finden ProgrammierspracheAls C und wählen Sie dann eine aus, die einfacher ist.

So Stück für Stück kannst du gehen Erhöhung der Komplexität der Programme um Ihr Wissen auf ein ziemlich fortgeschrittenes Niveau zu bringen. Beginnen Sie nicht mit Projekten mit vielen Zeilen, sonst werden Sie frustriert sein, wenn Sie nicht verstehen, wofür diese große Menge Code gedacht ist oder was sie bewirkt. Es beginnt mit kleinen Programmen von ein paar Dutzend Zeilen, dann für ein paar von 100 oder mehr und so weiter, bis Sie nach und nach komplexere Programme erreichen.

Außerdem rate ich Ihnen, nach Programmen zu suchen, die Sie in Bezug auf ihre Verwendung recht gut kennen. Stellen Sie sich zum Beispiel vor, Sie verwenden einen bestimmten Open-Source-Texteditor oder einen Rechner. Wenn Sie wissen, was dieses Programm in der Praxis tut, können Sie die angezeigten Quellcodezeilen leichter mit den Funktionen des Programms verknüpfen. Wenn Sie jedoch einen Code auswählen, von dem Sie keine Ahnung haben, reicht es nicht aus, nur mit Hilfe Ihrer grundlegenden Programmierkenntnisse und der Kommentare, die Sie in den Codedateien finden, zu arbeiten.

Schauen Sie sich zum Beispiel das zweite Beispiel an, das in meiner Suche nach Berechnungsprogrammen in gezeigt wurde Sprache C. des folgenden Bildes. Die Beschreibung zeigt, dass es sich um ein Befehlszeilenprogramm handelt, das einen einfachen Taschenrechner implementiert. Dies ist zunächst einmal ein guter Code, nicht nur wegen der Einfachheit des Codes, sondern auch, weil Sie auf Textbasis keine Codedateien haben, die sich auf die GUI usw. beziehen.

Github

Wenn wir in dieses Projekt gehen, um seinen Code zu sehen, werden wir zuerst die Dateien finden, die der Entwickler auf diese Plattform hochgeladen hat. Wie die Details der LIZENZ-Lizenz, die Datei mit Informationen par excellence README usw. Beachten Sie jedoch, dass dies der Fall ist Header-Dateien Wie helpers.h und struct.h sind diese beiden wichtig, und auch die beiden .c, die den tatsächlichen C-Quellcode für dieses Programm haben:

Kopfzeilen

Wenn wir auf einen der Header oder .h zugreifen, werden wir sehen, dass es sich um ein einfaches Programm ohne zu viele Zeilen handelt. Sie werden diese Dateitypen oft finden, es sei denn, es ist ein ziemlich einfaches Programm, das sie nicht benötigt, aber es ist ein Datei einschließen Hier sind einige Details oder zusätzliche Dateien enthalten, die der Compiler verarbeiten muss, um die endgültige Binärdatei des Programms zu bilden.

In einer Header-Datei finden Sie direkte Klassendeklarationen, Unterprogramme, definierte Variablen und andere. Manchmal sind diese .h Bibliotheken Sie können aus der Hauptcodedatei (.c) direkt auf das verweisen, was in diesen Headern deklariert ist, ohne die gesamte Struktur jedes Mal wiederholen zu müssen, wenn dies erforderlich ist:

Code-Header

Im Falle des Quellcodes selbst, wie die calc.c-Datei In unserem Beispiel finden Sie weitere Zeilen. Etwa 400 etwas, und in diesem speziellen Fall werden sie nicht kommentiert. Was das Verständnis des Codes ernsthaft behindert. Da es sich jedoch um ein Programm handelt, das so einfach wie ein Taschenrechner ist, können Sie es problemlos lesen und ändern, da es intuitiv ist:

denken Sie daran, Code lesen und ändern. Jene sind die Schlüssel zum Programmierenlernen auf die bestmögliche Weise ...

Noch ein Schritt: der Kernel

Linux Kernel

Wenn Sie bereits einige grundlegende Programmierkenntnisse in der Sprache C erworben haben, können Sie noch einen Schritt weiter gehen und in die faszinierende Welt von eintauchen die Betriebssysteme und Computerarchitekturen. Dafür müssen Sie etwas mehr über die Funktionsweise von Computern wissen, aber auch hier können uns die vorhandenen Open Source-Projekte sehr helfen.

Analysiere die Kernel-Quellcode Es kann uns helfen, besser zu verstehen, wie diese Welt der Betriebssysteme funktioniert, und sie werden auch Meisterklassen sein, um unsere "Promotion" in C-Programmierung zu erhalten, da es sich um wichtige Wörter handelt. Sie könnten denken, dass das beste Projekt, um dies zu lernen, der Linux-Kernel ist.

Stattdessen werden die aktuellen Abmessungen von neueste Linux-Kernel-Versionen Sie sind zu komplex, um für die meisten Sterblichen verständlich zu sein. Besonders für die große Menge an Code Für andere Subsysteme und Treiber, die Sie finden, wird der Kernel selbst hinzugefügt. Das könnte Sie zu der Annahme führen, dass Sie in kernel.org primitivere Versionen des Kernels finden, wie zum Beispiel die "historische", in der es einige "alte Versionen" wie die eine gibt Linux 0.01, der erste, bei dem der Code viel reduzierter und einfacher zu analysieren ist.

Kernel.org erfassen

Und obwohl Der C-Code, den Sie im Linux-Kernel finden, ist exquisitIch empfehle den Linux-Kernel nicht, da er normalerweise bei vielen Gelegenheiten kaum kommentiert wird. Ich sage nicht, dass die Entwickler eine schlechte Kommentarrichtlinie haben, aber es kann für jemanden, der neu in diesem Bereich ist, verwirrend sein. Speichern Sie also den Linux-Kernel und LKML für später ...

Und es ist wahr, dass sie existieren einige sehr gute Bücher und Kurse, um mehr über den Kernel, die Module und die Treiber zu erfahren, aber vielleicht nicht der beste Ausgangspunkt. Einige Beispiele sind (einige davon, wie Gregs, können Sie kostenlos herunterladen, da sie veröffentlicht wurden):

  • Linux-Kernel-Entwicklung 3. Edition von Robert Love.
  • Grundlegendes zum Linux Virtual Memory Manager von Mel Goman, obwohl sich letzterer nur auf die Kernel-Speicherverwaltung konzentriert.
  • Linux-Gerätetreiber 3. Edition von Greg Kroah-Hartman, obwohl es sich auf den 2.6-Kernel konzentriert, aber es ist eine großartige Arbeit, die Treiber und Kernelmodule zu verstehen.
  • Linux-Kernel auf den Punkt gebracht ist ein weiterer großer Greg Kroah-Hartman, der Ihnen eine viel globalere Vision gibt.

Sie können auch einige sehr sehr interessante Websites finden, die über Ihre eigenen hinausgehen Informationen und Dokumentation die Sie auf kernel.org finden können, wie:

Ein weiteres großartiges Projekt, das noch studiert wird und als Lernen dient, ist UNIX 6 .., dessen Code in Büchern wie Lions-Kommentar zu UNIX 6. Ausgabevon John Lions. Ich überlasse es Ihnen als eine andere alternative Idee, obwohl ich weiterhin Folgendes empfehle, das ich kommentieren werde ...

Aber ich denke das Die beste Ressource, die Ihnen zur Verfügung steht, ist das Studieren und Analysieren des MINIX-Quellcodes. Es ist ein viel einfacheres System, in dem Linux ursprünglich inspiriert wurde, das jedoch speziell für das Lernen und Lernen konzipiert wurde. Das Feedback, das zukünftige Betriebssystemarchitekten lernen sollen, ist außergewöhnlich für diejenigen, die gerade erst anfangen.

Mehr Informationen - MINIX3

Dort finden Sie viele Informationen und Dokumentationen zum Projekt. Und Sie können herunterladen das Betriebssystem selbst, haben aber auch ein gutes Wiki zur Verfügung, in dem es auch Texte für Entwickler gibt. Da es jedoch darum geht, C zu lernen und zu analysieren, wie ein Betriebssystem aufgebaut ist, verweise ich Sie direkt, um die erste Version des MINIX 1-Quellcodes herunterzuladen:

Quellcode - MINIX1

Zum Beispiel, wenn Sie zu gehen Hauptdatei main.cSie werden sehen, dass sich der Code hier stark von dem unterscheidet, wie Sie ihn unter Linux oder im Taschenrechnerprogramm finden, das ich zu Beginn dieses Beitrags als Beispiel verwendet habe. In diesem Fall werden Sie feststellen, dass die Anzahl der Kommentare viel höher ist:

MINIX-Quellcode

Hier ist fast jede Zeile oder jedes Fragment comentado. Machen Sie Ihre Lesen und Verstehen. Ich bestehe noch einmal darauf, es geht nicht nur um Lesen und Verstehen, es geht auch um Modifizieren. Nehmen Sie Ihre eigenen Änderungen und Tests vor, kompilieren Sie das Ergebnis und sehen Sie es. Das wird der beste Programmiermeister sein, den Sie finden können. Ich versichere Ihnen, wie ich meinen Schülern immer sage, dass das Lesen und Ändern von Code die beste Computerklasse ist, die Sie haben werden ...

Sie können nicht nur den Kernel des Betriebssystems analysieren, sondern auch andere Hilfselemente, aus denen das gesamte Betriebssystem und besteht auch Befehle die Sie in der Shell ausführen können. Es ist eine großartige Möglichkeit, von "innen" zu lernen, wie Befehle wie ls, cat, cp, grep, echo usw., die Sie täglich ausführen, auch mit ziemlich gut kommentiertem Code funktionieren ...

Befehlsquellcode - MINIX1

Schließlich kenne ich einen Mann, der einen Kernel erstellt hat, der von Grund auf neu erstellt wurde. Er heißt Luis und sein Projekt finden Sie unter dieser Adresse GitHub, ein weiteres gutes Studienbeispiel, das ich empfehlen würde. Sein System heißt IndienEs ist ganz einfach und perfekt, sich das Grundwissen anzueignen. Wer weiß? Vielleicht sind Sie der nächste, der es wagt, einen Kernel zu erstellen ...

Wenn du lernen willst Assembler oder ASM, eine interessante Sprache zusammen mit C zum Programmieren auf niedrigem Niveau und insbesondere für Betriebssysteme ... gibt es auch sehr interessante Projekte wie den Fall von KolibriOS, ein freies System, das in Assembler geschrieben wurde. In ASM ist es viel komplizierter, aber es gibt auch eine gute Vorstellung davon, wie Maschinen in Bezug auf Hardware auf einer intimeren Ebene arbeiten.

Tutorial: Drucken Sie den Quellcode, um ihn auf Papier zu studieren

PDF mit buntem Quellcode

Wenn Sie einer von denen sind, die nicht gerne Stunden vor einem Bildschirm verbringen und ihn betrachten, bevorzugen Sie vielleicht Papier. Ich werde Ihnen ein kleines Tutorial zeigen, wie Sie all diese Quellcodes drucken können, über die wir gesprochen haben oder die Sie analysieren möchten. Also kannst du ein PDF mit hervorgehobener Syntax haben Bereit zum Drucken auf Ihrem Drucker und Lesen auf Papier, wo Sie Ihre Anmerkungen und mehr machen können.

Um dies zu tun, wird das erste sein Installieren Sie die erforderlichen Pakete in unserer Distribution:

 

sudo apt-get install texlive-latex-extra latex-xcolor textlive-latex-recommended

Sobald wir diese Dateien haben, Wir werden LATEX verwenden Um den Quellcode in eine PDF-Datei umzuwandeln, müssen wir dieses Skript speichern, ihm die Ausführungsberechtigungen erteilen und es in Bash ausführen:

#!/usr/bin/env bash

tex_file=$(mktemp) ## Random text file name

cat<<EOF >$tex_file   ## Print the text file header
\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color}  %% Allow color names
\lstdefinestyle{customasm}{
  belowcaptionskip=1\baselineskip,
  xleftmargin=\parindent,
  language=C++,   %% Change this to whatever you write in
  breaklines=true, %% Wrap long lines
  basicstyle=\footnotesize\ttfamily,
  commentstyle=\itshape\color{Gray},
  stringstyle=\color{Black},
  keywordstyle=\bfseries\color{OliveGreen},
  identifierstyle=\color{blue},
  xleftmargin=-8em,
}        
\usepackage[colorlinks=true,linkcolor=blue]{hyperref} 
\begin{document}
\tableofcontents

EOF

find . -type f ! -regex ".*/\..*" ! -name ".*" ! -name "*~" ! -name 'src2pdf'|
sed 's/^\..//' |                 ## Change ./foo/bar.src to foo/bar.src

while read  i; do                ## Loop through each file
    name=${i//_/\\_}             ## escape underscores
    echo "\newpage" >> $tex_file   ## start each section on a new page
    echo "\section{$i}" >> $tex_file  ## Create a section for each filename

   ## This command will include the file in the PDF
    echo "\lstinputlisting[style=customasm]{$i}" >>$tex_file
done &&
echo "\end{document}" >> $tex_file &&
pdflatex $tex_file -output-directory . && 
pdflatex $tex_file -output-directory .  ## This needs to be run twice ## for the TOC to be generated  </pre><pre>

Nach dem Speichern in einer Datei mit der Name pdf.sh.können Sie ihm Berechtigungen erteilen und auf einfache Weise ausführen:

chmod +x pdf.sh
./pdf.sh

Das Ergebnis ist eine PDF-Datei mit farblich hervorgehobenem Text zum besseren Lesen der Quellcodedateien des aktuellen Verzeichnisses. Der Name des PDF-Dokuments lautet alle.pdf. Jetzt können Sie es in Ihre Druckwarteschlange stellen, um es auf Papier zu haben.

Das einzige Problem ist übrigens das die Quellcodedateien Das Verzeichnis, in dem Sie dieses Skript ausführen und dessen Namen Leerzeichen enthalten, funktioniert mit diesem Skript nicht. Wenn es welche gibt, können Sie ihren Namen oder das Skript ändern, um sie zu unterstützen ...

Vergessen Sie nicht, Ihre Kommentare zu hinterlassenIch beantworte gerne alle Fragen, die Sie dazu haben, oder höre mir jedes Feedback an, das Sie zur Verbesserung des Beitrags benötigen. Und ich hoffe, es hat als Leitfaden gedient, um Ihnen den Einstieg in diese Welt zu erleichtern ...


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Zuschlagen sagte

    Sehr guter Beitrag… !!!
    Ich habe nur ein Problem mit dem Skript, es stimmt für Fehler in Zeile 5.

  2.   Xavier sagte

    Hallo, gute Nacht hier in Mexiko, es wäre gut, wenn Sie dieses Medium weiter durchschreiben und, wenn möglich, weiterhin mit Wissen füllen würden. Auf der anderen Seite danke ich Ihnen, dass Sie Ihre Zeit und Erfahrung investiert haben, für die wir die Hälfte übrig haben. Mein Fall war, dass ich meine Karriere aufgrund von Problemen verlassen habe, jetzt arbeite ich, um mich selbst zu unterstützen. Nach und nach nehme ich Dinge in diesem Sinne auf, wirklich total danke.

  3.   Engel Martinz sagte

    Wie bekomme ich alle Informationen zur Programmierung?

  4.   Liebeslose Isma sagte

    Das Problem mit Zeile 5 ist möglicherweise (weil ich es noch nicht ausprobiert habe xd), weil es so geschrieben ist:

    Katze < $ tex_file ## Druckt den Header der Textdatei

    wann es so sein sollte:

    cat <$ tex_file ## Gibt den Textdateikopf aus

    Zumindest stelle ich mir vor: U ...

    Grüße.

  5.   Liebeslose Isma sagte

    Oh, diesmal hat er es richtig gemacht>: v

  6.   Gregory Ros sagte

    Herzlichen Glückwunsch zum Artikel, ich habe es geliebt! Stoppen Sie die Programmierung vor…. xD fast dreißig Jahre, unzählige Male habe ich darüber nachgedacht, es wieder aufzunehmen, und aus Zeitmangel und vor allem wegen Faulheit habe ich es immer verschoben. Ich gebe zu, dass die Dokumentation, die es jetzt gibt, fantastisch ist, schade, dass das meiste davon auf Englisch ist. Ich weiß, dass jetzt jeder es verstehen will, aber mein Wissen beschränkt sich auf etwas mehr als die zwei Dutzend Wörter, die beim Programmieren verwendet werden. Gibt es ein Tutorial zum Kernell auf Spanisch? Ich verspreche nicht, die Programmierung fortzusetzen, ich habe es zu oft verlassen, um zu glauben, dass ich es jetzt tun könnte, aber wenn es etwas gibt, das ich nie verloren habe, war es Neugier. Vielen Dank für den Artikel und die besten Grüße.