Dies 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 zu MISRA Standards entwickelt, und ich habe nur in der Lage gewesen, eine etwas älteren (ab 2004) Version der MISRA-Richtlinien zu 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. Das würde fork
, exec
und popen
die alle von POSIX definiert sind, nicht durch die Sprache C-Standard. Von den drei ist popen
wahrscheinlich am ähnlichsten in Funktionalität/Schnittstelle zu der C system
Funktion.
Sie könnten sich fragen, warum MISRA C die Verwendung der system
-Funktion einschränkt und ob für die Verwendung der obigen drei Funktionen dasselbe gilt.
Sind Sie sicher, dass MISRA etwas sogar * ähnlich * zu 'system' erlaubt? Die Ausführung von beliebigem Code ist von Natur aus unsicher. – molbdnilo
Eigentlich, als ich für MISRA-Konformität meines Codes versuchte, gibt es Fehler, dass System() eine verbotene Funktion ist. Ich bin mir nicht sicher, ob MISRA etwas dem System ähnlich macht. – BKT
Wenn Sie wirklich ** einen Aufruf von system() verwenden müssen und Sie alle Implikationen verstehen, die mit dieser Entscheidung einhergehen, erhöhen Sie eine Projektabweichung (siehe die ersten Kapitel des Buches) und holen Sie sich Ihre Hierarchie, um sie zu genehmigen. – Andrew