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

浙公网安备 33010602011771号