嵌入式自学第二十四天(5.20)
(1)系统编程:包括四部分文件操作、进程、网络、数据库。
(2)操作系统主要管理硬件,封装了大量接口(大量函数),利用好这些接口就可以实现对硬件的操作
(3)输入输出是相对于计算机说的。
(4)函数不会用时用man + 函数名 查找。
(5)接下来先学习文件操作函数。
打开文件:FILE *fq = fopen(“文件名”,“权限”);
FILE *是一个文件流指针,包括文件内容、大小、创建时间等等,这里主要用到文件内容。
权限:读r 读写r+目标文件必须存在
写w 读写w+目标文件不存在会先创建,已存在会清空原内容。
函数调用成功返回文件流指针,失败返回空指针。
读:fgetc/fgets:前者一次读一个单词,后者一次读一行。
应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> // ./a.out srcfile1 dstfile2 int main(int argc, char** argv) { FILE* src = fopen("1.txt", "r"); // argv[1] FILE* dst = fopen("2.txt", "w"); // "argv[2]" if (NULL == src || NULL == dst) { fprintf(stderr, "fopen error\n"); return 1; } while (1) { int c = fgetc(src); if(EOF == c) { break; } fputc(c, dst); } fclose(dst); fclose(src); // system("pause"); return 0; } |
写:fputc/fputs:前者一次写一个单词,后者一次写一行。
应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> // a.out srcfile dstfile int main(int argc, char *argv[]) { if(argc<3) { printf("usage:./a.out srcname dstname\n"); return 1; } //FILE* fp = fopen("/etc/passwd","r"); FILE* src = fopen(argv[1],"r"); FILE* dst = fopen(argv[2],"w"); if(NULL == src|| NULL == dst) { fprintf(stderr,"fopen error\n"); return 1; } while(1) { char buf[1024]={0}; if(NULL == fgets(buf,sizeof(buf),src)) { break; } fputs(buf,dst); } fclose(src); fclose(dst); return 0; } |
关闭文件:fclose(fq)
(6)od -t x4 1.txt以二进制格式查看文件,每四个字节一组
vimdiff对比两个文件内容
int main(int argc, char **argv)
argv是参数个数,argv[i]是参数。
./a.out 1 2 3 4 5 6,函数中参数argv[i]对应的1到6。