Alternative von system () in c Linux, um einen Terminal-Befehl unter Linux auszuführen

8

Ich möchte einen Terminal-Befehl von Linux in einem C-Programm ausführen. Momentan verwende ich system() function, aber ich möchte jedes andere verwenden, da die system() -Funktion laut MISRA gesperrt ist.

Zum Beispiel, wie kann ich ersetzen

%Vor%     
BKT 05.06.2015, 09:01
quelle

3 Antworten

3

Sie können fork() verwenden und dann nach exec() Familie von Funktionen.

Alternativ können Sie sich auch popen() ansehen.

    
Sourav Ghosh 05.06.2015 09:03
quelle
3

Zuerst können Sie fork() verwenden, um einen untergeordneten Prozess zu erstellen. Im untergeordneten Prozess können Sie exec() aufrufen, um den Befehl auszuführen, den Sie möchten.
Es gibt ein einfaches Beispiel:

%Vor%

#! / usr / bin / env bash
ls -l

************* test.c ****************

%Vor%     
Ren 05.06.2015 09:28
quelle
0

Das ist eine sehr interessante Frage. Mein Verständnis von MISRA C ist, dass es Richtlinien für die Verwendung der C-Sprache in kritischen Systemen bietet. Aber die C-Sprachen-Standardbibliothek, die die system -Funktion enthält, ist nur ein kleiner Teil der Summe des Bibliothekscodes, der typischerweise in modernen Anwendungen verwendet wird - oft sogar in eingebetteten Systemen.

Ich habe noch nie eine Anwendung für MISRA-Standards entwickelt und konnte nur eine etwas ältere Version (ab 2004) der MISRA-Richtlinien finden. Soweit ich das beurteilen kann, schweigt MISRA über die Verwendung von POSIX-Bibliotheksfunktionen, die Sie normalerweise auf jedem Linux-basierten System zur Verfügung haben. Wenn MISRA wirklich nichts über POSIX-Bibliotheksfunktionen sagt, sollten alle Funktionen in der POSIX-Bibliothek uneingeschränkt funktionieren. Dazu gehören fork , exec und popen , die alle von POSIX und nicht vom C-Standard definiert werden. Von den drei ist popen wahrscheinlich am ähnlichsten in Funktionalität / Schnittstelle zur C system -Funktion.

Sie möchten sich vielleicht fragen, warum MISRA C die Verwendung der Funktion system einschränkt und ob für die Verwendung der obigen drei Funktionen dasselbe gilt.

    
Dan Moulding 05.06.2015 17:19
quelle

Tags und Links