1.
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <head.h>
5 char lx(mode_t m)
6 {
7 switch(m & S_IFMT)
8 {
9 case S_IFSOCK:return 's';
10 case S_IFLNK:return 'l';
11 case S_IFREG:return '-';
12 case S_IFBLK:return 'b';
13 case S_IFDIR:return 'd';
14 case S_IFCHR:return 'c';
15 case S_IFIFO:return 'p';
16 }
17 }
18 int main(int argc, const char *argv[])
19 {
20 char a[50]="";
21 char c[10]="";
22 printf("请输入文件路径\n");
23 scanf("%s",a);
24 printf("请输入文件名称\n");
25 scanf("%s",c);
26 strcat(a,c);
27 struct stat buf;28
28 if(stat(a,&buf) < 0)
29 {
30 ERR_MSG("stat");
31 return -1;
32 }
33 char b=lx(buf.st_mode);
34 if('d' == b)
35 {
36 DIR *op = opendir(a);
37 if(NULL == op)
38 {
39 ERR_MSG("opendir");
40 return -1;
41 }
42 int i=0;
43 while(1)
44 {
45 struct dirent *dp = readdir(op);
46 if(NULL == dp)
47 {
48 if(0 == errno)
49 {
50 printf("目录文件读取完毕\n");
51 break;
52 }
53 else
54 {
55 ERR_MSG("readdir");
56 return -1;
57 }
58 }
59 struct stat buf1;
60 if(stat(dp->d_name,&buf1) < 0)
61 {
62 ERR_MSG("stat");
63 return -1;
64 }
65 char d=lx(buf1.st_mode);
66
67 printf("[%d]%c %s\n",++i,d,dp->d_name);
68 }
69 if(closedir(op) < 0)
70 {
71 ERR_MSG("closedir");
72 return -1;
73 }
74 }
75 else
76 {
77 printf("%c %s\n",b,c);
78 }
79 return 0;
80 }
2.
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <head.h>
5 int main(int argc, const char *argv[])
6 {
7 int fd1 = open("a.c",O_RDONLY);
8 int fd2 = open("b.c",O_WRONLY | O_CREAT,0777);
9 if(fd1 < 0)
10 {
11 ERR_MSG("open");
12 return -1;
13 }
14 if(fd2 < 0)
15 {
16 ERR_MSG("open");
17 return -1;
18 }
19 pid_t aid=fork();
20 char buf[1];
21 ssize_t res = 0;
22 int a=0;
23 ssize_t b=0;
24 while(1)
25 {
26 bzero(buf,sizeof(buf));
27 res=read(fd1,buf,sizeof(buf));
28 if(0 == res)
29 {
30 break;
31 }
32 a+=res;
33 }
34 if(aid > 0)
35 {
36 sleep(1);
37 off_t c=lseek(fd2,0,SEEK_SET);
38 off_t d=lseek(fd1,0,SEEK_SET);
39 if(c < 0)
40 {
41 ERR_MSG("lseek");
42 return -1;
43 }
44 if(d < 0)
45 {
46 ERR_MSG("lseek");
47 return -1;
48 }
49 while(1)
50 {
51 bzero(buf,sizeof(buf));
52 res=read(fd1,buf,sizeof(buf));
53 b+=res;
54 if(b == ((a/2)+1))
55 {
56 break;
57 }
58 write(fd2,buf,res);
59 }
60 }
61 else if(aid == 0)
62 {
63 off_t c=lseek(fd1,a/2,SEEK_SET);
64 if(c < 0)
65 {
66 ERR_MSG("lseek");
67 return -1;
68 }
69 while(1)
70 {
71 bzero(buf,sizeof(buf));
72 res=read(fd1,buf,sizeof(buf));
73 if(0 == res)
74 {
75 break;
76 }
77 write(fd2,buf,res);
78 }
79 }
80 else
81 {
82 ERR_MSG("fork");
83 return -1;
84 }
85 return 0;
86 }
3.xmid