cp命令_fread, fwrite
1 /*
2 * FILE: p673_cp.c
3 * DATE: 20180124
4 * ==============
5 */
6
7 #include <stdio.h>
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
1 #include <stdio.h>
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
1 #include <stdio.h>
2 #include <string.h>
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命令
1 /*
2 * FILE: p606_ls.c
3 * DATE: 20180124
4 * ==============
5 */
6
7 #include <stdio.h>
8 #include <stdlib.h> // exit
9 #include <unistd.h> // STDOUT_FILENO
10 #include <string.h>
11 #include <dirent.h> // 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 }