I want to execute a terminal command of Linux in a C program. Currently I am using system() function but I want to use any other as the system() function is banned as per MISRA.
For example, how can I replace
system("hwclock --systohc --utc");
First you can use fork()to create a child process,then in the child process,you can call exec() to execute command what you want.
There is a simple example:
$ chmod u+x command.sh
$ cat command.sh
#!/usr/bin/env bash
ls -l
************* test.c ****************
#include<unistd.h>
int main(void)
{
execl("./command.sh","command.sh",(char*)0);
return 0;
}
This is a very interesting question. My understanding of MISRA C is that it provides guidelines for the use of the C language in critical systems. But the C language standard library, which includes the system function, is merely a small piece of the sum total of library code typically used in modern applications -- often even in embedded systems.
I've never developed an application to MISRA standards, and I've only been able to find a slightly older (from 2004) version of the MISRA guidelines. From what I can tell, MISRA is silent about the use of POSIX library functions, which you are typically going to have available on any kind of Linux-based system. If MISRA really is silent about POSIX library functions, then it stands to reason that any functions in the POSIX library should be unrestricted. That would include fork, exec, and popen which are all defined by POSIX, not by the C language standard. Of the three, popen is probably most similar in functionality/interface to the C system function.
That said, you may want to ask yourself why MISRA C restricts the use of the system function and whether or not the same rationale applies to the use of the above three functions as well.