MOOC《Linux操作系统编程》学习笔记-实验二

实验二 文件I/O实验

https://www.icourse163.org/learn/UESTC-1003040002?tid=1455108444#/learn/content?type=detail&id=1228729535&sm=1

 

1、几个函数说明

 

 

 

 

 

 

 

 

 

 

实验要求及扩展要求:

 

 

 实验代码:

 1 #include "stdio.h"
 2 #include "unistd.h"
 3 #include "sys/types.h"
 4 #include "string.h"
 5 #include "errno.h"
 6 #include "fcntl.h"
 7 
 8 void printErr(char *argv)
 9 {
10     perror(argv);
11     //printf(strerror(errno));
12     //printf("\n");
13 }
14 
15 int main(int argc, char *argv[])
16 {
17     int srcFile = open(argv[1],O_RDONLY);
18     if(-1 == srcFile)
19         printErr(argv[1]);
20     else
21     {
22         int desFile = open(argv[2],O_CREAT|O_WRONLY|O_EXCL,0777);
23         if(-1 == desFile)
24         {
25             //printErr(argv[2]);
26             char s[100] = {0};
27             printf("the file %s already exists, if need merge please enter YES, otherwise please enter NO to overwrite \n",argv[2]);
28             scanf("%s",&s[0]);
29 
30             if(0 == strncasecmp(s,"YES",3))
31             {
32                 desFile = open(argv[2],O_WRONLY|O_APPEND);
33             }
34             else if(0 == strncasecmp(s,"NO",2))
35             {
36                 desFile = open(argv[2],O_WRONLY|O_TRUNC);
37             }else 
38             {
39                 printf("enter is Error \n");
40             } 
41         }
42        
43         if(-1 != desFile){
44             char ReadBuff[4096] = {0};
45             char i = 1;
46             do
47             {
48                 ssize_t ReadLen = read(srcFile,ReadBuff,sizeof(ReadBuff));
49                 if(-1 == ReadLen)
50                 {
51                     printErr(argv[1]);
52                     i = 0;
53                 }
54                 else if(ReadLen > 0)
55                 {
56                     ssize_t WriteLen = write(desFile,ReadBuff,ReadLen);
57                     if(-1 == WriteLen)
58                     {
59                         printErr(argv[2]);
60                         i = 0;
61                     }else i = 1;
62                 }else i = 0;
63             }while(i);
64 
65             int closeFile = close(desFile);
66             if(-1 == closeFile)
67                 printErr(argv[2]);
68         } 
69 
70         int closeFile = close(srcFile);
71         if(-1 == closeFile)
72             printErr(argv[1]); 
73     }
74     return 0;
75 }

执行结果:

student@student-K43SA:~/Desktop/LearnLinux/test2_1$ gcc -o mycp mycp.c
student@student-K43SA:~/Desktop/LearnLinux/test2_1$ ./mycp ./error2.c ./error1.c
./error2.c: No such file or directory
student@student-K43SA:~/Desktop/LearnLinux/test2_1$ ./mycp ./error1.c ./error2.c
student@student-K43SA:~/Desktop/LearnLinux/test2_1$ ./mycp ./error1.c ./error2.c
the file ./error2.c already exists, if need merge please enter YES, otherwise please enter NO to overwrite 
yes
student@student-K43SA:~/Desktop/LearnLinux/test2_1$ ./mycp ./error1.c ./error2.c
the file ./error2.c already exists, if need merge please enter YES, otherwise please enter NO to overwrite 
no
student@student-K43SA:~/Desktop/LearnLinux/test2_1$ ./mycp ./error1.c ./error2.c
the file ./error2.c already exists, if need merge please enter YES, otherwise please enter NO to overwrite 
dfdsaa
enter is Error
student@student-K43SA:~/Desktop/LearnLinux/test2_1$ cd ../ student@student-K43SA:~/Desktop/LearnLinux$ cd test2_1 student@student-K43SA:~/Desktop/LearnLinux/test2_1$ ./mycp ../test4_1 ./error2.c the file ./error2.c already exists, if need merge please enter YES, otherwise please enter NO to overwrite yes ../test4_1: Is a directory

 

posted @ 2021-06-02 20:59  天悦桐汐  阅读(86)  评论(0)    收藏  举报