标准库的三部分
1.string
2.标准I/O
3.kernel内核
4.小技巧 (查看你已经写的代码量 ) 命令:find ./代码所在文件夹/ -name "*.c" | xargs wc -l
1.标准I/O :主存与外部设备的数据交换
2.文本文件 : 最早的定义(都可见的ASCII组成的)
二进制文件 : 人看不懂的。。
区别 : 文本文件可见, 二进制文件不可见。
以上只限于标准I/O里面
3.UTF-8 :占三个字节
4. sizeof 计算类型大小 在编译阶段
strlen 以 ‘ ’为结尾 在执行阶段
5.操作文件分为三步 :
fopen | FILE *fopen(const char *path, const char*moe); |
r/w/a | r, r+, w, w+, a, a+ |
fclose | 成功返回0,其它返回EOF |
打开方式 | 含义 |
r | 只读,文件必须已存在 |
r+ | 允许读和写,文件必须已存在 |
w | 只写,如果文件不存在则创建,如果文件已存在则把文件长度截断为0字节再重新写,也就是替换掉原来的文件内容 |
w+ | 允许读和写,如果文件不存在则创建,如果文件已存在则把文件长度截断为0字节再重新写 |
a | 只能在文件末尾追加数据, 如果文件不存在则创建 |
a+ | 允许读和追加数据,如果文件不存在则创建 |
6.FILE *fp; 文件句柄。成功返回文件指针,失败返回NULL。
7.strerror: errno
8.fgetc/fputc : 以字符为单位,只针对文本文件
9.文件结尾 : length长度达到
10.资源泄漏主要针对长期运行的服务器等。。
11.
文件指针 | 流 | 默认的含义 |
stdin | 标准输入 | 键盘 |
stdout | 标准输出 | 屏幕 |
stderr | 标准错误 | 屏幕 |
13.goto语句的典型用法 :为了将已打开的文件关闭
1 #include <stdio.h> 2 #include <errno.h> 3 #include <string.h> 4 5 int main(int argc, char *argv[]) 6 { 7 if(argc < 3) { 8 fprintf(stderr,"Please input %s <file1> <file2> ", argv[0]); 9 return 1; 10 } 11 12 FILE *fp_output, *fp_input; 13 14 if(NULL == (fp_output = fopen(argv[1], "r"))) { 15 printf("The %s<file> is Erro: %s . ", argv[1], strerror(errno)); 16 return 1; 17 } 18 if(NULL == (fp_input = fopen(argv[2], "w+"))) { 19 printf("The %s<file> is Erro: %s . ", argv[2], strerror(errno)); 20 goto err; 21 } 22 23 fseek(fp_output, 0, SEEK_END); 24 int len = ftell(fp_output); 25 fseek(fp_input, len -1, SEEK_SET); 26 int ch_error; 27 if(EOF == (ch_error = fputc('0', fp_input))) { 28 printf("The <file>%s is copy Erro. ", strerror(errno)); 29 goto err1; 30 } 31 32 rewind(fp_output); 33 rewind(fp_input); 34 35 int ch; 36 while((ch = fgetc(fp_output)) != EOF) 37 { 38 fputc(ch, fp_input); 39 } 40 41 rewind(fp_output); 42 rewind(fp_input); 43 44 int ch_output, ch_input; 45 #if 1 46 printf("Outputfile %s <file> : ", argv[1]); 47 while((ch_output = fgetc(fp_output)) != EOF) 48 { 49 fputc(ch_output, stdout); 50 } 51 //#else 52 printf("Inputfile %s <file> : ", argv[2]); 53 while((ch_input = fgetc(fp_input)) != EOF) 54 { 55 fputc(ch_input, stdout); 56 } 57 #endif 58 59 err1 : 60 fclose(fp_input); 61 err : 62 fclose(fp_output); 63 64 return 0; 65 }
14.提醒 : 尽量少使用exit(1);
15.diff : 判断两个文件内容是否相同
16. int fseek(FILE *stream, long offset, int whence)
whence | SEEK_SET 文件开头 |
SEEK_CUR 文件当前位置 | |
SEEK_END 文件末尾 |
17.rewind(FILE *fp) 返回文件头
18.ftell : 返回文件读写位置
19.计算文件长度 :
1 #include <stdio.h> 2 #include <errno.h> 3 #include <string.h> 4 5 int main(int argc, char *argv[]) 6 { 7 if(argc < 2) { 8 fprintf(stderr, "The %s : no <file>. ", argv[0]); 9 return 1; 10 } 11 12 FILE *fp; 13 14 if(NULL == (fp = fopen(argv[1], "r"))) { 15 fprintf(stderr, "The file %s : %s ", argv[1], strerror(errno)); 16 return 1; 17 } 18 19 fseek(fp, 0, SEEK_END); 20 int len = ftell(fp); 21 22 printf("%s: %d ", argv[1], len); 23 24 fclose(fp); 25 26 return 0; 27 }
20.在文件中 : 初始值不为0,在.data段
初始值为0, 在.bss段
今天的英语: positioned(定位) exist(存在) inital(初始) truncate(截短)
今天还不错。就是宝贝有点忙。。
想你喃!!