<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Systemcalls]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe ich bin hier richtig.<br />
Und zwar, ich studiere seit einem halben Jahr.<br />
Wir haben in ein paar Tagen eine Klausur, wo wir einen C++ Prog lesen müssen und &quot;verstehen&quot; müssen. Dazu wird meist in der Klausur verlangt, dass man Systemcalls markiert und beschreibt. Das lustige ist, wir haben in der Vorlesung kaum ein C++ Prog erklärt bekommen und nur ansatzweise erklärt bekommen was Systemcalls sind.<br />
Ich weiss aus den höreren Semester, dass die Klausur manchmal ziemlich fies sein soll, nach dem Motto Systemcalls im Code wo man nie zuvor in einer Vorlesung o.ä.gesehen hat.</p>
<p>Gibt es evtl. eine Liste mit wichtigen Systemcalls? Evtl. mit kurzer Beschreibung was der Call macht?</p>
<p><strong>Hier mal ein Beispiel aus der Probeklausur wen es interessiert:</strong></p>
<pre><code>/*01*/ int main(int argc, char *argv[]) 
/*02*/ { 
/*03*/    int status1, status2, pd[2];
/*04*/    if (pipe(pd) == -1) exit(1); 
/*05*/    switch (fork()) 
/*06*/    { 
/*07*/      case -1: 
/*08*/         exit(2); 
/*09*/      case 0: 
/*10*/        if (close(pd[0])==-1) exit(3);
/*11*/        if (close(1)==-1 || dup(pd[1])!=1) exit(4); 
/*12*/        execlp (argv[1], &amp;argv[1], NULL); exit(5); 
/*13*/      default: 
/*14*/        if (close(pd[1])==-1) exit(6); 
/*15*/        switch(fork()) 
/*16*/        { 
/*17*/            case -1:
/*18*/              exit(7); 
/*19*/            case 0: 
/*20*/              if (close(0)==-1||dup(pd[0])!=0) exit(8); 
/*21*/              execvp (argv[2], &amp;argv[2]); exit(9); 
/*22*/            default: 
/*23*/              wait (&amp;status2); 
/*24*/        } 
/*25*/        wait(&amp;status1); 
/*26*/      } 
/*27*/      exit(0); 
/*28*/  }
</code></pre>
<p><strong>Aufgaben dazu:<br />
(1) Kennzeichnen Sie im folgenden Programm scws01 die Systemcalls und den Programmfluss für Vater- und Sohnprozesse.<br />
(2) Beschreiben Sie die Funktion der Systemcalls und ihre Nutzung in diesem Programm. (Numerierung der Programmzeilen nutzen!)<br />
(3) Welche Aufgabenstellung ist mit diesem Programm realisiert? Geben Sie ein Beispiel für die Nutzung dieses Programmes an<br />
(4) Wie kann man die Funktion von scws01 mittels Shell-Kommandos realisieren?</strong></p>
<p>Der Vaterprozess geht von Zeile: 5-27 und der Sohn von Zeile 10-12 und evtl. ein weiterer Sohn Zeile 20-21 oder?</p>
<p>Danke im Voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299505/systemcalls</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 05:31:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299505.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Feb 2012 16:26:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Systemcalls on Sun, 12 Feb 2012 16:26:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe ich bin hier richtig.<br />
Und zwar, ich studiere seit einem halben Jahr.<br />
Wir haben in ein paar Tagen eine Klausur, wo wir einen C++ Prog lesen müssen und &quot;verstehen&quot; müssen. Dazu wird meist in der Klausur verlangt, dass man Systemcalls markiert und beschreibt. Das lustige ist, wir haben in der Vorlesung kaum ein C++ Prog erklärt bekommen und nur ansatzweise erklärt bekommen was Systemcalls sind.<br />
Ich weiss aus den höreren Semester, dass die Klausur manchmal ziemlich fies sein soll, nach dem Motto Systemcalls im Code wo man nie zuvor in einer Vorlesung o.ä.gesehen hat.</p>
<p>Gibt es evtl. eine Liste mit wichtigen Systemcalls? Evtl. mit kurzer Beschreibung was der Call macht?</p>
<p><strong>Hier mal ein Beispiel aus der Probeklausur wen es interessiert:</strong></p>
<pre><code>/*01*/ int main(int argc, char *argv[]) 
/*02*/ { 
/*03*/    int status1, status2, pd[2];
/*04*/    if (pipe(pd) == -1) exit(1); 
/*05*/    switch (fork()) 
/*06*/    { 
/*07*/      case -1: 
/*08*/         exit(2); 
/*09*/      case 0: 
/*10*/        if (close(pd[0])==-1) exit(3);
/*11*/        if (close(1)==-1 || dup(pd[1])!=1) exit(4); 
/*12*/        execlp (argv[1], &amp;argv[1], NULL); exit(5); 
/*13*/      default: 
/*14*/        if (close(pd[1])==-1) exit(6); 
/*15*/        switch(fork()) 
/*16*/        { 
/*17*/            case -1:
/*18*/              exit(7); 
/*19*/            case 0: 
/*20*/              if (close(0)==-1||dup(pd[0])!=0) exit(8); 
/*21*/              execvp (argv[2], &amp;argv[2]); exit(9); 
/*22*/            default: 
/*23*/              wait (&amp;status2); 
/*24*/        } 
/*25*/        wait(&amp;status1); 
/*26*/      } 
/*27*/      exit(0); 
/*28*/  }
</code></pre>
<p><strong>Aufgaben dazu:<br />
(1) Kennzeichnen Sie im folgenden Programm scws01 die Systemcalls und den Programmfluss für Vater- und Sohnprozesse.<br />
(2) Beschreiben Sie die Funktion der Systemcalls und ihre Nutzung in diesem Programm. (Numerierung der Programmzeilen nutzen!)<br />
(3) Welche Aufgabenstellung ist mit diesem Programm realisiert? Geben Sie ein Beispiel für die Nutzung dieses Programmes an<br />
(4) Wie kann man die Funktion von scws01 mittels Shell-Kommandos realisieren?</strong></p>
<p>Der Vaterprozess geht von Zeile: 5-27 und der Sohn von Zeile 10-12 und evtl. ein weiterer Sohn Zeile 20-21 oder?</p>
<p>Danke im Voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180199</guid><dc:creator><![CDATA[Mole1986m]]></dc:creator><pubDate>Sun, 12 Feb 2012 16:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to Systemcalls on Sun, 12 Feb 2012 17:02:24 GMT]]></title><description><![CDATA[<p>Das ist kein C++, sondern C, und auch kein reines Standard-C, sondern POSIX. In der Form gehört das eigentlich rüber ins Linux/Unix-Forum.</p>
<p>Der <a href="https://en.wikipedia.org/wiki/System_call" rel="nofollow">Artikel zum Thema</a> in der englischen Wikipedia ist eine ganz gute Zusammenfassung dessen, was Syscalls sind.</p>
<p>Eine Liste von Syscalls (linux-spezifisch) findest du <a href="https://www.kernel.org/doc/man-pages/online/pages/man2/syscalls.2.html" rel="nofollow">hier</a>; diese ist bei einem modernen Betriebssystem aber natürlich ziemlich umfangreich.</p>
<p>Was das Beispielprogramm angeht: es nimmt zwei Parameter, fasst sie als Programmnamen auf, startet sie und leitet stdout des einen in stdin des anderen um. &quot;prog foo bar&quot; entspricht grob &quot;foo | bar&quot;. Verwendete Syscalls (bzw. verwendete Bibliotheksfunktionen, die dann auf Syscalls umleiten) sind pipe, exit, fork, close, dup, execlp, execvp und wait.</p>
<p>Randnotiz: Die Bibliotheksfunktionen leiten nicht zwangsläufig auf die Syscalls um, deren Namen sie tragen. Beispielsweise benutzt fork() unter Linux sys_clone.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180221</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 12 Feb 2012 17:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Systemcalls on Sun, 12 Feb 2012 18:18:44 GMT]]></title><description><![CDATA[<p>Danke, du hast mir schon mal sehr weitergeholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180269</guid><dc:creator><![CDATA[Mole1986m]]></dc:creator><pubDate>Sun, 12 Feb 2012 18:18:44 GMT</pubDate></item></channel></rss>