1.myecho
#include<stdlib.h>
#include<stdio.h>
int main(int argc,char *argv[])
{
if(argc==1){
printf("Error!\n");
exit(0);
}
for(int i=1;i<argc;i++)
printf("%s ",argv[i]);
printf("\n");
return 0;
}
2.mycat
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[]){
FILE *fp;
int fsize;
char *buffer;
if(argc!=2){
printf("Error!\n");
exit(0);
}
fp=fopen(argv[1],"r");
if(!fp){
printf("Error!\n");
exit(0);
}
fseek(fp,0,SEEK_END);
fsize=ftell(fp);
rewind(fp);
buffer=(char*)malloc((1+fsize)*sizeof(char));
if(!buffer){
printf("Error!\n");
exit(0);
}
fread(buffer,1,fsize,fp);
printf("%s\n",buffer);
fclose(fp);
free(buffer);
return 0;
}
3.mycp
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[]){
FILE *fp;
int fsize;
int fr;
char *buffer;
if(argc!=3){
printf("Error:wrong parameter...\n");
return 0;
}
fp=fopen(argv[1],"r");
if(!fp){
printf("Error:can't open the file!\n");
exit(0);
}
fseek(fp,0,SEEK_END);
fsize=ftell(fp);
rewind(fp);
buffer=(char *)malloc((1+fsize)*sizeof(char));
if(!buffer){
printf("Error:memory wrong!\n");
exit(0);
}
fr=fread(buffer,1,fsize,fp);
if(!fr){
printf("Error:read wrong!\n");
exit(0);
}
fclose(fp);
fp=fopen(argv[2],"w");
if(!fp){
printf("Error:open file wrong!\n");
exit(0);
}
fwrite(buffer,1,fsize,fp);
fclose(fp);
free(buffer);
return 0;
}
4.mysys
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <linux/string.h>
void mysys(char *command)
{
char c[100];
strcpy(c,command);
pid_t pid;
pid=fork();
char *argv[10];
int i = 0;
char *s;
if(pid == 0)
{
//printf("start1\n");
s= strtok(c," ");
//printf("start2\n");
argv[i] = s;
while(s != NULL)
{
i++;
s= strtok(NULL," ");
argv[i] = s;
}
argv[i] = NULL;
//for(int j=0;j<i;j++)
//{
// printf("s = %s\n",argv[j]);
//}
int error = execvp(argv[0],argv);
if(error < 0)
perror("execvp");
printf("end\n");
}
wait(NULL);
//return 0;
}
int main()
{
printf("--------------------------------------------------\n");
mysys("echo HELLO WORLD");
printf("--------------------------------------------------\n");
mysys("ls /");
printf("--------------------------------------------------\n");
return 0;
}
5.sh1
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <linux/string.h>
void mysys(char *command)
{
char c[100];
strcpy(c,command);
pid_t pid;
pid=fork();
char *argv[10];
int i = 0;
char *s;
if(pid == 0)
{
//printf("start1\n");
s= strtok(c," ");
//printf("start2\n");
argv[i] = s;
while(s != NULL)
{
i++;
s= strtok(NULL," ");
argv[i] = s;
}
argv[i] = NULL;
//for(int j=0;j<i;j++)
//{
// printf("s = %s\n",argv[j]);
//}
in