Unterschied POSIX, Ansi C, GNU C



  • Hallo 🙂

    Kann mir jemand den Unterschied der oben 3 genannten Begriffe erklären? Ich bin neu in Linux und C-Programmierung unterwegs und bin mir nicht sicher, ob ich die drei Begriffe richtig verstanden habe.

    Also, ich denke, dass Ansi C die einheitliche Grundfunktion von C ist und POSIX eine Erweiterung von ANSI C ist, die aber nur unter Linux vorhanden sind. Bspw. gibt es die header-datei <thread.h> und die dazugegörigen Funktionen nur in Linux und nicht in Ansi C. Ist das soweit richtig?
    Aber was ist dann genau GNU C?

    thx! 👍



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Linux/Unix in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Mal im Lexikon geschaut?

    ANSI C: Das ist die Standardisierung der Sprache C, wie sie 1989 vom amerikanischen Standardisierungsinstitut (ANSI) festgeschrieben wurde. Das ist es, was man mit C89 (oder auch C90) meint. Das ist ein bewusst sehr systemunabhängig gehaltener Standard. Im C-Forum kannst du Links zum Text dieses Standards finden. Wenn du dich beim Programmieren an diesen Standard hältst, läuft dein Programm auf jedem System, für das es einen C-Compiler gibt. Was so ziemlich jedes System ist, selbst bessere Haushaltsgeräte haben oft eine C-Portierung.

    GNU C, ein Begriff den man sehr selten hört, ist die Implementierung des obigen C-Standards in GCC, das ist die GNU Compiler Collection, ein sehr populärer Compiler, gemacht vom GNU-Projekt, eine Art Unix-Clon (und das wohl populärste unixartige System auf der Welt, denn Linux kommt normalerweise mit GNU gebündelt). Der ANSI C Standard verbietet nicht, dass eine Implementierung nicht auch mehr können darf als der Standard vorschreibt, und genau das trifft auf GNU C zu. Es kann einiges mehr als normales C89, wobei so manches Feature in Nachfolgeversionen des ANSI C Standards eingeflossen ist. Wenn du dich an diesen Standard hältst, dann läuft dein Programm auf jedem System, dass einen GCC zur Verfügung hat. Das sind offensichtlicherweise alle GNU/Linux Systeme, aber auch viele mehr, denn der GCC ist populär und wurde viel portiert, z.B. auch auf Linux.

    POSIX hat nicht ganz direkt mit C zu tun. Wie ich schon sagte, ist GNU eine Art Unix Nachmache (Auch wenn GNU für "GNU is not Unix" steht). Unix war ein sehr tolles System, hatte aber lixenxrechtliche Probleme, weswegen es viele Nachahmer gibt, nicht nur GNU. POSIX ist dann wiederum ein Standard, bezüglich der API (die dann in C definiert ist, deswegen steht es wohl in deiner Liste) und ein paar anderen Aspekten, der diesen Systemen gemeinsam ist. Das heißt, das ist kein Standard für eine Programmiersprache, sondern dafür, wie man beim Programmieren Funktionen des Betriebssystems aufrufen kann. Wenn du dich an diesen Standard hältst, läuft dein Programm auf allen POSIX-Systemen. Das sind zunächst einmal alle unixartigen Systeme (also so ziemlich alles außer Windows), aber es gibt auch POSIX-Anpassungen für Systeme, von denen man es nicht unbedingt vermuten würde, z.B. gibt es von Microsoft etwas, um auch Windows zu einem POSIX kompatibel zu machen.

    Man sollte das aber alles nicht zu absolut sehen. In der realen Welt sind diese Standards oft nicht ganz exakt oder vollständig umgesetzt. Diese Standards haben teilweise obskure Klauseln, die niemand so ganz genau nimmt.


  • Mod

    man könnte auch denken, GNU C ist das Ergebnis von falsch abgeschriebenem Denglisch a la "Genieße your Zeh" oder so...
    https://www.youtube.com/watch?v=I25UeVXrEHQ (2m,22s)

    ( https://www.youtube.com/watch?v=UK52v6bCPvg ) (2:07)



  • Danke 👍


Anmelden zum Antworten