method 1:
#include <stdio.h>
#include <stdlib.h>
int main(int argc,const char **argv)
{
// system("ls -al /Users/rengar/Desktop/C/shell/1.text");
FILE *fp;
char buffer[1000];
fp=fopen("ls /Users/rengar/Desktop/C/shell","r+");
fgets(buffer,sizeof(buffer),fp);
printf("%s",buffer);
pclose(fp);
}
method 2:管道,但是忽视了信号的处理
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int system(const char *cmdstring) /* version without signal handling */
{
pid_t pid;
int status;
if (cmdstring == NULL)
return(1); /* always a command processor with UNIX */
if ((pid = fork()) < 0) {
status = -1; /* probably out of processes */
} else if (pid == 0) { /* child */
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
_exit(127); /* execl error */
} else { /* parent */
while (waitpid(pid, &status, 0) < 0) {
if (errno != EINTR) {
status = -1; /* error other than EINTR from waitpid() */
break;
}
}
}
return(status);
}
void test_system()
{
int status;
char *cmdstr = "date";
if ((status = system(cmdstr)) < 0) {
perror("system error");
return;
}
}
void test_system1()
{
int status;
char *cmdstr = "ps -ajx";
if ((status = system(cmdstr)) < 0) {
perror("system error");
return;
}
}
int main()
{
test_system();
sleep(3);
test_system1();
}