Questa è una domanda molto interessante. La mia comprensione di MISRA C è che fornisce linee guida per l'uso del linguaggio C in sistemi critici. Ma la libreria standard del linguaggio C, che include la funzione system
, è semplicemente una piccola parte della somma totale del codice di libreria tipicamente utilizzato nelle applicazioni moderne, spesso anche nei sistemi embedded.
Non ho mai sviluppato un'applicazione per gli standard MISRA e sono riuscito a trovare solo una versione leggermente più vecchia (dal 2004) delle linee guida MISRA. Da quello che posso dire, MISRA tace sull'uso delle funzioni di libreria POSIX, che tipicamente avrete a disposizione su qualsiasi tipo di sistema basato su Linux. Se MISRA tace davvero sulle funzioni della libreria POSIX, allora è ovvio che qualsiasi funzione nella libreria POSIX dovrebbe essere illimitata. Ciò include fork
, exec
e popen
, tutti definiti da POSIX, non dallo standard di linguaggio C. Dei tre, popen
è probabilmente la più simile in funzionalità/interfaccia alla funzione C system
.
Detto questo, è possibile chiedersi perché MISRA C limita l'uso della funzione system
e se la stessa logica si applica o meno all'utilizzo delle tre funzioni precedenti.
fonte
2015-06-05 17:19:25
Sei sicuro che MISRA permetta qualcosa anche * simile * a 'sistema'? L'esecuzione di codice arbitrario è intrinsecamente non sicura. – molbdnilo
In realtà quando ho provato per la conformità MISRA del mio codice che dà errore che system() è una funzione vietata. Non sono sicuro che MISRA abbia qualcosa di simile al sistema. – BKT
Se ** ** è veramente necessario utilizzare una chiamata a system() e capisci tutte le implicazioni che derivano da tale decisione, aumenta la deviazione del progetto (vedi i primi capitoli del libro) e ottieni la tua gerarchia per approvarla. – Andrew