shell实现 ( cp, ls, )

cp命令_fread, fwrite

shell实现 ( cp, ls, )_第1张图片

  1 /*
  2  * FILE: p673_cp.c
  3  * DATE: 20180124
  4  * ==============
  5  */
  6 
  7 #include 
  8 
  9 #define BUFFSIZE 128
 10 
 11 int main(int argc, char *argv[])
 12 {       
 13         FILE *fp1, *fp2;
 14         char buf[BUFFSIZE];
 15         int len;
 16         
 17         if(argc != 3)
 18                 fprintf(stderr, "Usage: ./mycp SOURCE DEST\n");
 19         // fopen 打开源文件
 20         if((fp1=fopen(argv[1], "r")) == NULL)
 21                 perror("faile to fopen");
 22         // fopen 目标文件,若不存在则创建
 23         fp2 = fopen(argv[2], "w");
 24         
 25         // 循环读写
 26         while((len=fread(buf, sizeof(char), BUFFSIZE, fp1)) > 0)
 27                 fwrite(buf, sizeof(char), len, fp2);
 28         
 29         fclose(fp1);
 30         fclose(fp2);
 31         return 0;
 32 }

cp命令_fgetc, fputc

shell实现 ( cp, ls, )_第2张图片

  1 #include 
  2 
  3 int main(int argc, char *argv[])
  4 {
  5         FILE *fp1, *fp2;
  6         int c;
  7 
  8         fp1 = fopen(argv[1], "r");
  9         fp2 = fopen(argv[2], "w");
 10 
 11         while((c=fgetc(fp1)) != EOF)
 12         {
 13                 fputc(c, fp2);
 14                 fputc(c, stdout);
 15         }
 16 
 17         fclose(fp1);
 18         fclose(fp2);
 19 
 20         return 0;
 21 }

cp命令_fgets, fputs

shell实现 ( cp, ls, )_第3张图片

  1 #include 
  2 #include 
  3 
  4 #define BUFFSIZE 128
  5 
  6 int main(int argc, char *argv[])
  7 {
  8         FILE *fp1, *fp2;
  9         char buf[BUFFSIZE];
 10 
 11         fp1 = fopen(argv[1], "r");
 12         fp2 = fopen(argv[2], "w");
 13 
 14         while(fgets(buf, BUFFSIZE, fp1) != NULL)
 15         {
 16                 int len = strlen(buf);
 17                 fputs(buf, fp2);
 18                 buf[len-1] = '\0';      // 去除换行符
 19                 fprintf(stdout, "%s - %d\n", buf, len-1);
 20         }
 21         return 0;
 22 }

ls命令

shell实现 ( cp, ls, )_第4张图片

  1 /*
  2  * FILE: p606_ls.c
  3  * DATE: 20180124
  4  * ==============
  5  */
  6 
  7 #include 
  8 #include      // exit
  9 #include      // STDOUT_FILENO
 10 #include 
 11 #include      // opendir
 12 
 13 void myls(char *ptr);
 14 
 15 int main(int argc, char *argv[])
 16 {
 17         if(argc != 2)
 18         {
 19                 fprintf(stderr, "Usage: ./build path\n");
 20                 exit(-1);
 21         }
 22         myls(argv[1]);
 23         return 0;
 24 }
 25 
 26 void myls(char *path)
 27 {
 28         DIR *dir;
 29         struct dirent *ptr;
 30         int count = 0;
 31 
 32         // opendir 打开目录     
 33         if((dir=opendir(path)) == NULL)
 34                 perror("fail to opendir");
 35 
 36         // 顺序读取每一个目录项
 37         while((ptr=readdir(dir)) != NULL)
 38         {
 39                 // 跳过“.”和“..”两个目录
 40                 if(strcmp(ptr->d_name, ".")==0 || strcmp(ptr->d_name, "..")==0)
 41                         continue;
 42                 printf("%s\t", ptr->d_name);
 43                 count++;
 44                 // 一行显示5个
 45                 if(count!=0 && count%5==0)
 46                         printf("\n");
 47                         //write(STDOUT_FILENO, "\n", 1); // 不可
 48         }
 49         // closedir 关闭目录
 50         closedir(dir);  // 注意一定要关闭目录
 51         printf("\n");
 52 }


你可能感兴趣的:(书《Linux,C,程序设计大全》吴岳)