Linux系统编程-DAY01
一、系统编程(大量的函数)属于应用程序编程,系统编程是操作系统走完程序后,才运行我的程序;
底层编程中包含驱动
二、Linux系统编程包括:
文件:
进程:同一时刻,多个任务同时进行
网络:
数据库
三、标准io(io是输入输出 stdio.h)
从内存里出来叫输出,从键盘进去叫输入
<> 是系统库函数,默认路径: /user/include
eg:---> stdio.h ---> stdio.c ---> libc.so --> /usr/ lib so动态库(lib.c so 此时是一个二进制文件,也叫库文件)
" "是用户自定义函数,默认是当前路径
/etc 是掌管linux所有配置的文件路径
四、标准io
1.文件:文件操作的步骤:打开 --> 读写 --> 关闭
2.读写文件时,往后读,系统会自动++,称为文件流指针
3.读写相关操作: fgec/fputc 一次处理一个字符。
4.fgets/fputs 一次处理一行,用来处理文本文件
5.fread/fwrite 用于处理二进制文件(如 ./a.out)
6.r / r+ 目标文件必须存在,否则会打开失败
7.w 目标文件存在清空 或 创建一个可写的文件
8.w+ 目标文件可以不存在。不存在:创建;存在:清空。
9.fgetc ·EOF //文件读完,end of file 宏值为-1
10.vimdiff 1.txt
11.fgets/fputs s代表字符串的意思,文本文件
12.(1)char *fgets (char *s, int size, FILE *stream), size表示最多读几个。 遇到\n就终止了,因为一次读一行。读到的东西个数:size - 1个,字符串最后一个是' \0 '。读完返回null(文件到达结尾或出错,一般当作到达结尾),文本文件开空间时,大小建议开1~4K。
(2)fputs 后面要手动加换行
五、练习
1.fputc函数
#include <stdio.h>int main(int argc, char **argv)
{FILE *fp = fopen("1.txt", "w");if(NULL == fp){fprintf(stderr, "fopen");return 1;}fputc('M', fp);fputc('e', fp);fputc('i', fp);fputc('Z', fp);fputc('u', fp);fputc('o', fp);fputc('\n', fp);fclose(fp);return 0;
}
2.fgetc函数
#include <stdio.h>int main(int argc, char **argv)
{FILE *fp = fopen("1.txt", "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;} while(1){int c = fgetc(fp);if(EOF == c){break;}printf("%c", c);}printf("\n");fclose(fp);return 0;
}
3.cp(fgetc和fputc)
#include <stdio.h>int main(int argc, char **argv)
{if(argc < 2){fprintf(stderr, "usage: ./a.out srcfile destfile\n");return 1;}FILE *src = fopen(argv[1], "r");FILE *dest = fopen(argv[2], "w");if(NULL == src || NULL == dest){fprintf(stderr, "fopen error\n");return 1;}int count = 0;while(1){int c = fgetc(src);if(EOF == c){break;}fputc(c, dest);count++;}fclose(src);fclose(dest);printf("%d\n",count);return 0;
}
4.fgets
#include <stdio.h>
int main(int argc, char **argv)
{if(argc < 2){fprintf(stderr, "usage: ./a.out srcfile destfile\n");return 1;}FILE *fp = fopen(argv[1], "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}char buf[1024] = {0};int count = 0;while(1){if(NULL == fgets(buf, sizeof(buf), fp)){break;}count++;printf("%s", buf);}fclose(fp);printf("行数有:%d行\n", count);return 0;
}
5.fputs
#include <stdio.h>
int main(int argc, char **argv)
{FILE *fp = fopen("1.txt", "w");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}char buf[] = "cyy ";char buf2[] = "and xiaofan";fputs("hello ", fp);fputs("\n", fp);fputs(buf, fp);fputs("\n", fp);fputs(buf2, fp);fputs("\n", fp);fclose(fp);return 0;
}
6.cp2.0(fgets和fputs)
#include <stdio.h>
int main(int argc, char **argv)
{if(argc < 2){fprintf(stderr, "usage: ./a.out srcfile destfile\n");return 1;}FILE *src = fopen(argv[1], "r");FILE *dest = fopen(argv[2], "w");if(NULL == dest || NULL == src){fprintf(stderr, "fopen error\n");return 1;}char buf[1024] = {0};while(1){ char *s = fgets(buf, sizeof(buf), src);if(NULL == s){break;}fputs(s, dest);}fclose(dest);fclose(src);return 0;
}
7.统计文本文件中a-z,出现的次数。并输出。/etc/passwd
#include <stdio.h>
int main(int argc, char **argv)
{if (argc < 2) {fprintf(stderr, "usage is ./a.out file1 \n");return 1;}FILE *fp = fopen(argv[1], "r");if (NULL == fp) {fprintf(stderr, "fopen error\n");return 1;}int count = 0;char buf[1024] = {0};if (NULL == fgets(buf, sizeof(buf), fp)) {return 1;} else {int i;char s[100] = {0};for (i = 0; i < 26; ++i) {s[i] = i + 97;}int a[100] = {0};while(1){int c = fgetc(fp);if(EOF == c){break;}else{for(i = 0; i < 26; ++i){if(s[i] == c){a[i] += 1;}}}}fclose(fp);for(i = 0; i < 26; ++i){printf("%c = %d\n",s[i], a[i]);}}return 0;
}