A. Linux中 汇编 *char[] 如何定义使用,麻烦也给出汇编 execve系统调用的实例。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
int my_system(char *ch)
{
pid_t pid = vfork();
if(pid < 0){
perror("pid");
}
if(pid == 0){
char *buf[]={"","-c","ls",NULL};
// execlp("/bin/sh","","-c",ch,NULL);
execve("/bin/sh",buf,NULL);
//第一个参数是一个完整路径,第二个是参数地址数组。第三个是环境变,没需要的话就NULL。
_exit(1);
}
else{
int status;
waitpid(-1,&status,0);
if(WIFEXITED(status) == 0){
printf("error");
fflush(stdout);
}
}
return 0;
}
int main(int argc, char * argv[])
{
while(1)
{
char cmd[100];
printf("cmd:");
fflush(stdout);
fgets(cmd, sizeof(cmd), stdin);
cmd[strlen(cmd) - 1] = 0;
my_system(cmd);
}
return 0;
}