#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<ctype.h>
#include<pwd.h>
#define SIZE 256
int main()
{
while(1)
{
struct passwd *pwd;
pwd = getpwuid(getuid());//get user name
char Buf[SIZE];
gethostname(Buf, SIZE);//get host name
char _pwd[SIZE];
getcwd(_pwd, sizeof(_pwd));//get current path
printf("%s@%s:%s $ ",pwd->pw_name,Buf,_pwd);
fflush(stdout);
char cmd[128];
size_t _s = read(0,cmd,sizeof(cmd)-1);
if(_s > 0){
cmd[_s - 1] = '\0';
}
else
{
perror("read");
return 1;
}
printf("%s\n",cmd);
char *argv[32];
argv[0] = cmd;
char *start = cmd;
int i = 1;
while(*start)
{
if(isspace(*start))
{
*start = '\0';
start++;
argv[i] = start;
i++;
continue;
}
start++;
}
argv[i] = NULL;
pid_t id = fork();
if(id < 0)
{
printf("fork error");
exit(1);
}
else if(0 == id){//child
execvp(argv[0],argv);
exit(1);
}
else
{
int status = 0;
int pd = waitpid(-1, &status, 0);
if(WIFEXITED(status) && pd == id)
{
// printf("wait success");
}
else
{
printf("wait failed");
}
}
}
}
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<ctype.h>
#include<pwd.h>
#define SIZE 256
int main()
{
while(1)
{
struct passwd *pwd;
pwd = getpwuid(getuid());//get user name
char Buf[SIZE];
gethostname(Buf, SIZE);//get host name
char _pwd[SIZE];
getcwd(_pwd, sizeof(_pwd));//get current path
printf("%s@%s:%s $ ",pwd->pw_name,Buf,_pwd);
fflush(stdout);
char cmd[128];
size_t _s = read(0,cmd,sizeof(cmd)-1);
if(_s > 0){
cmd[_s - 1] = '\0';
}
else
{
perror("read");
return 1;
}
printf("%s\n",cmd);
char *argv[32];
argv[0] = cmd;
char *start = cmd;
int i = 1;
while(*start)
{
if(isspace(*start))
{
*start = '\0';
start++;
argv[i] = start;
i++;
continue;
}
start++;
}
argv[i] = NULL;
pid_t id = fork();
if(id < 0)
{
printf("fork error");
exit(1);
}
else if(0 == id){//child
execvp(argv[0],argv);
exit(1);
}
else
{
int status = 0;
int pd = waitpid(-1, &status, 0);
if(WIFEXITED(status) && pd == id)
{
// printf("wait success");
}
else
{
printf("wait failed");
}
}
}
}