Linux 应用软件编程 文件编程(IO)

发布时间:2026/6/1 21:55:12

Linux 应用软件编程 文件编程(IO) 常见的操作系统1.Windows界面友好使用方便。闭源收费。pc2.Linux类Unix开源免费。嵌入式平台2.Unix收费4.FreeRTOS小型嵌入式平台实时性一、文件编程IOIOinput/output 输入/输出1.为什么学习文件操作1.保存数据掉电数据不丢失保存在硬盘外存2.一切皆文件硬盘、鼠标、键盘、显示器、普通文件....2. Linux下的文件类型ls -l 查看Linux下的文件相关详情lld rwx rwx r-x 2 linux linux 4096 11月 5 2024 serial 文件类型 文件读写可执行权限 硬链接个数 用户自己 组长 文件大小 文件最后被修改的时间 rwx自己对文件的读写可执行权限 rwx同组用户对文件的读写可执行权限 rwx其他人b c d - l s p七种文件类型 * b ---block ---块设备文件硬盘 c ---character ---字符设备文件鼠标、键盘、显示器、外设传感器... d ---directory ---目录文件文件夹 - ---regular ---普通文件xxx.c xxx.h a.out xxx.jpg... l ---link ---链接文件类似于快捷方式 s ---socket ---套接字文件网络通信 p ---pipe ---管道文件进程间通信3. 文件操作方法Linux下的两种文件操作方式标准IOC标准库提供的对文件的操作接口库函数如printf、scanf文件IOLinux内核提供的对文件的操作方法系统调用文件操作思想1.打开文件2.读写文件3.关闭文件4. 标准IO学习标准C库提供的一堆对文件的操作接口函数-----》通过man手册1.打开文件fopen2.读写文件fgetc/fputc、fgets/fputs、fread/fwrite3.关闭文件fcloseman手册 标准man手册分为8个章节 man 1 用户命令 man 2 系统调用 man 3 c函数库调用 man 4 设备文件和特殊文件 man 5 配置文件和格式 man 6 游戏相关 man 7 杂项总述 man 8 管理类命令函数接口1. fopenFILE *fopen(const char *pathname, const char *mode); 功能打开一个文件并获得一个文件流指针 参数 pathname文件名 mode文件的打开方式 r 以只读方式打开文件必须存在 r 以读写方式打开文件必须存在 W 以只写方式打开文件存在则清空文件不存在则创建 w 以读写方式打开文件存在则清空文件不存在则创建 “a” 以追加写的方式打开文件不存在则创建 a 以读和追加写的方式打开文件不存在则创建 返回值 成功返回文件流指针FILE * 失败NULL文件流从文件中读写数据时体现出来的字节流。文件流指针FILE*。标志IO中对文件的操作都是面向文件流指针。2. fcloseint fclose(FILE *stream); 功能关闭文件 参数 stream已打开的文件的文件流指针 返回值 成功0 失败EOF-13. fputcint fputc(int c, FILE *stream); 功能向文件中写入一个字符 参数 c 要写入的字符的ASCII值 stream要写入的文件流指针 返回值 成功写入的字符的ASCII值 失败EOF-1练习1. 使用fputc向文件中写入hello worldod -c 文本文件名 以字符方式查看该文件中的数据int main() { FILE*fp fopen(1.txt,w); if(fp NULL) { printf(fopen malloc\n); } char a[12] hello world; int len strlen(a); for(int i 0;ilen;i) { fputc(a[i],fp); } fclose(fp); return 0; }4. fgetcint fgetc(FILE *stream); 功能从文件中读取一个字符 参数 stream文件流指针 返回值 成功读到的字符的ASCII值 失败EOF(-1) 读到文件末尾EOF练习使用fgetc实现cat的功能将一个指定的文本文件内容输出到终端。#includestdio.h int main(int argc,char*argv[]) { if(argc 2) { printf(usage:./a.out filename\n); return -1; } FILE*fp fopen(argv[1],r); if(fp NULL) { printf(fopen error); return -1; } int ret 0; while(1) { ret fgetc(fp); if(ret EOF) { break; } printf(%c,ret); } fclose(fp); return 0; }使用fgetc和fputc实现文件的拷贝使用主函数传参的方式实现。int copy_file(const char*srcname,const char*dstname) { FILE*fpsrc fopen(srcname,r); FILE*fpdst fopen(dstname,w); if(fpsrc NULL || fpdst NULL) { printf(fopen error\n); return -1; } char str 0; while(1) { str fgetc(fpsrc); if(str EOF) { break; } fputc(str,fpdst); } fclose(fpsrc); fclose(fpdst); } int main(int argc,char*argv[]) { if(argc 2) { printf(usage srcname dstname\n); return -1; } copy_file(argv[1],argv[2]); return 0; }三个操作系统已经打开的文件流stdin stdout stderr三个操作系统已经打开的文件流 FILE * stdin ---标准输入流---》关联的文件输入设备键盘 stdout ---标准输出流---》关联的文件输出设备显示屏 stderr ---标准出错流---》关联的文件显示屏fgetc和getcharret getchar() ret fgetc(stdin);fputc和putcharputchar(ret) fputc(ret, stdout);5. fgetschar *fgets(char *s, int size, FILE *stream); 功能从文件中读取一行 参数 s存放读取数据的内存首地址 size希望从文件中读到的字节数 stream要读的文件的文件流指针 返回值 成功返回s的地址 失败NULL 读到文件末尾NULL实现cat的功能gets和fgets的区别gets只能从终端读取数据fgets可以任意文件流指针中读取fgets会保留用户收入的\n字符gets不会读取\n字符fgets安全的gets是危险的fgets最多读取size-1个数据最后一个位置存放字符串结束标志gets没有大学的限制6. fputsint fputs(const char *s, FILE *stream); 功能向文件中写入一行数据 参数 s 要写入的数据的首地址 stream要写入的文件 返回值 成功0 失败EOF-1 注意不会将字符串结束标志\0字符写入文件其他1.主函数传参程序运行时命令行传递的参数可通过主函数传参的方式传递给程序。实参命令行参数形参int main(int argc, const char *argv[])argc:命令行传递的参数个数 argv:指针数组多个指针分别指向命令行传递的参数./a.out aaa bbb argv[0] : ./a.out argv[1] : aaa argv[2] : bbb2.const修饰的指针const char *p; ----const修饰p指向的内容表示该内容只读不能被修改 char const *p; ----同上 char *const p; ----const修饰指针p表示指针的指向不能发生修改 const char *const p; ----p指针指向不能被修改指向的内容也不能被修改​ 3. 普通文件-​ ASCII文件文本文件 ‘2’ ‘0’ ‘2’ ‘6’ xxx.c xxx.h xxx.txt​ 二进制文件0/1 011111101010 a.out xxx.png xxx.jpg xxx.bmp xxx.mp4

相关新闻