赞
踩
所以,文件操作的本质就是进程和被打开文件的关系。
1 #include<stdio.h> 2 #include<unistd.h> 3 #include<string.h> 4 #define FILE_NAME "log.txt" 5 6 int main() 7 { 8 //以w方式单纯的打开文件,c会自动清空内部的数据 9 FILE* fp = fopen(FILE_NAME, "a");//r,w,r+(读写,不存在出错),w+(读写,不存在创建),a(apend, 追加),a+(读+追加) 10 if(fp == NULL) 11 { 12 perror("fopen"); 13 return 1; 14 } 15 //char buffer[64]; 16 把文件中的数据读取到buffer中 16 //while(fgets(buffer, sizeof(buffer) - 1, fp) != NULL) 17 //{ 18 // buffer[strlen(buffer) - 1] = 0; 19 // puts(buffer); 20 //} 21 22 int cnt = 5; 23 while(cnt) 24 { 25 fprintf(fp, "%s:%d\n", "hello world", cnt--); 26 } 27 28 fclose(fp); 29 return 0; 30 }
如上,是我们之前学的文件相关操作。还有 fseek ftell rewind 的函数,在C部分已经有所涉猎。
操作文件,除了上述C接口(当然,C++也有接口,其他语言也有),我们还可以采用系统接口来进行文件访问,先来直接以代码的形式。
示例代码:
1 #include<stdio.h> 2 #include<unistd.h> 3 #include<string.h> 4 #include<sys/types.h> 5 #include<sys/stat.h> 6 #include<fcntl.h> 7 #define FILE_NAME "log.txt" 8 9 int main() 10 { 11 umask(0); 12 //"w" --> O_WRONLY | O_CREAT | O_TRUNC, 0666 13 //"a" --> O_WRONLY | O_CREAT | O_APPEND, 0666 14 int fd = open(FILE_NAME, O_RDONLY, 0666); 15 if(fd < 0) 16 { 17 perror("open"); 18 return 1; 19 } 20 char buffer[1024]; 21 ssize_t num = read(fd, buffer, sizeof(buffer) - 1); 22 if(num > 0) 23 { 24 buffer[num] = 0; 25 } 26 printf("%s", buffer); 27 //int cnt = 5; 28 //char outBuffer[64]; 29 //while(cnt) 30 //{ 31 // sprintf(outBuffer, "%s:%d\n", "aaaaa", cnt--); 32 // //你以\0作为字符串的结尾,是C语言的规定,和我文件有什么关系呢? 33 // write(fd, outBuffer, strlen(outBuffer)); 34 //} 35 //printf("fd:%d\n", fd); 36 37 close(fd); 38 39 return 0; 40 }
man open
示例代码:
1 #include<stdio.h> 2 #include<unistd.h> 3 #include<string.h> 4 #include<sys/types.h> 5 #include<sys/stat.h> 6 #include<fcntl.h> 7 #define FILE_NAME(number) "log.txt"#number 8 9 int main() 10 { 11 printf("stdin->fd:%d\n", stdin->_fileno); 12 printf("stdout->fd:%d\n", stdout->_fileno); 13 printf("stderr->fd:%d\n", stderr->_fileno); 14 umask(0); 15 int fd0 = open(FILE_NAME(1), O_WRONLY | O_CREAT | O_APPEND, 0666); 16 int fd1 = open(FILE_NAME(2), O_WRONLY | O_CREAT | O_APPEND, 0666); 17 int fd2 = open(FILE_NAME(3
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。