#define execle("/bin/ls","bin/ls","-l",NULL);
Что вы ожидаете от этой строки?
Эти две строки
if(argv[1]==".c")
if(argv[2]==".out")
Не делайте то, что вы думаете
Попробуйте
if( strcmp(".c" , argv[1]) == 0 )
if( strcmp(".out" , argv[2]) == 0 )
Подробнее: http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
Кроме того,
exec("/bin/cat","bin/cat/",argv[2],NULL);
На самом деле не существует, поэтому измените его на execle
и #include <stdint.h>
Подробнее: http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html
В итоге вы должны получить что-то вроде:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc , char **argv)
{
int i;
for(i=1 ; i<argc ; i++)
{
if(strcmp(".c" , argv[1]) == 0)
{
if(fork()==0)
{
execle("/usr/bin/gcc","/usr/bin/gcc",argv[1],NULL);
exit(1);
}
}
if(strcmp(".c" , argv[1]) == 0)
{
if(fork()==0)
{
execle("/bin/cat","bin/cat/",argv[2],NULL);
exit(1);
}
}
}
return 0;
}