系统函数I/O操作与标准库函数流操作
来源:互联网 发布:nginx sub filter 编辑:程序博客网 时间:2024/06/05 07:01
对于应用编程的I/O操作
对于应用编程的io操作有两种函数操作方式,一为直接调用系统内核的API操作列open,其次为调用c标准的库函数操作列fopen。系统调用方式函数的返回值为句柄,而c库返回的是文件结构体指针。
以下为系统调用方式对于open,lseek,write,read,的简单使用,具体的设置参数参考手册输入即可
#include <sys/types.h>#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <sys/stat.h>#include <unistd.h>#define FILE_PATH "./test.txt" //测试文件路径#define FILE_PATH2 "./test2.txt" //测试文件2路径main(int argc,char *argv[]){ int f_id; //测试文件的打开和文件的指针char w_buf[100];//写数据缓存区char r_buf[100];//读取文件数据到缓冲区int length; //获取文件大小 if((f_id=open(FILE_PATH,O_RDWR|O_CREAT ,777))<0)//若不存在则自动创建,打开后返回的为int型指针地址,错误则为-1 {printf("第一次打开错误\n");//标志位小于0则打开失败,其他具体参数根据手册观察exit(1);//退出系统 } else //大于0则打开成功 { printf("第一次打开文件成功\n"); } if((read(f_id,r_buf,50*sizeof(r_buf))==-1)) { printf("第一次读取文件失败\n"); } else {printf("第一次读取文件数据成功\n打印第一次读取的数据\n"); printf("%s\n",r_buf); } if(close(f_id)>=0) //关闭文件 {printf("第一次关闭文件成功\n"); } else {printf("第一次文件关闭失败\n"); } scanf("%s",w_buf); //数据写入缓冲区 printf("输入缓冲区数据测试:\n"); printf("%s\n",w_buf); intf("%d\n",w_buf);//第二次打开文件后对文件的操作//文件操作if((f_id=open(FILE_PATH2,O_CREAT|O_RDWR,777))<0) {printf("第二次打开文件失败\n"); }else{printf("第二次打开文件成功\n");} printf("文件大小:%d\n",length=(int)lseek(f_id,0,SEEK_END));//用leesk得到文件大小 lseek(f_id,0,SEEK_END);//可以通过此函数移动文件的读写位置重而写入读出数据 if(write(f_id,w_buf,10)<0) { printf("数据写入文件失败\n"); } else { printf("数据写入文件成功\n"); } lseek(f_id,0,0);//得到文件把文件的读写位置移动到起始位置 if(read(f_id,r_buf,length*sizeof(r_buf))<0) { printf("第二次读取数据错误\n"); } else {printf("第二次读取数据成功\n"); printf("打印测试文件数据\n\b");printf("%s\n",r_buf); } if(close(f_id)>=0) //关闭文件 {printf("第二次关闭文件成功\n"); } else {printf("第二次文件关闭失败\n"); } return 0;}
c标准库函数文件流操作
对于标准库函数操作文件流,系统函数概念类似,一般都是对文本文件和二进制文件操作,具体部分共用代码测试如下:
#include <stdio.h>#include <string.h>#include <stdlib.h>#define FILE_PATH1 "./test.txt" //当前目录下的txt文本形式文件#define FILE_PATH2 "./testb" //当前目录下的二进制文件int main(int argc,char *argv[]){FILE *fp;char *p="文本文件文本流测试\n";char out[400];if((fp=(FILE *)fopen(FILE_PATH1,"a+"))==NULL)//以附加的方式代开文件,若文件不存在则创建,{ //文件打开的模式有多种,具体情况查看手册即可perror("fopen file1 failure ");exit(EXIT_FAILURE);}fflush(fp);//由于是文本流,所以须得用多加一个f,用库函数作用只是在于把缓冲区的数据读入或读取,强行挤压fwrite(p,strlen(p),1,fp);//此种写入属于不带缓冲的直接写入相关文件printf("fp->flag:%d\n ",fp->_flags);//printf遇回车换行符切换属于行缓冲fclose(fp); //用flush函数刷新输入与输出属于全缓冲,直接缓冲区全部置0//读文件件流测试if((fp=(FILE *)fopen(FILE_PATH1,"a+"))==NULL){ perror("second open error");exit(1);}printf("第二次打卡成功\n");fread(out,sizeof(out),2,fp);//除了用用fread读取也可以用gets得到,此时的文本就相当于用户界面输入一样fclose(fp);printf("fread 读取的数据:%s\n",out);//fprintf 与fscanf函数的使用和没有f时时一样的,只是输入,输出的对象不同而已,此时的文件可以想象成是屏幕printf("格式化方式输入输出文件测试开始\n");if((fp=(FILE *)fopen(FILE_PATH1,"a+"))==NULL){ perror("second open error");exit(1);}fprintf(fp,"格式化方式测试数据\n");fscanf(fp,"%s",out);//除了用用fread读取也可以用gets得到,此时的文本就相当于用户界面输入一样fclose(fp); //读取的数据多少与缓存区大小有关,如果要改变读取位置通fseek函数即可。同时还可以feof函数查看文件是否已经读到尾部printf("格式化输入输出测试数据:%s\n",out);return 0;}
0 0
- 系统函数I/O操作与标准库函数流操作
- 标准I/O操作
- C标准I/O库函数与无缓存的I/O函数
- 标准I/O库函数
- 标准I/O库函数
- linux文件操作-标准I/O操作--fgets与gets
- 标准I/O操作编程
- C标准I/O操作
- 标准文件I/O操作
- 标准I/O常用函数以及Linux文件夹操作函数
- 深入剖析Linux I/O操作与标准I/O操作区别与联系
- C语言文件操作标准库函数与Linux系统函数效率比较
- Linux系统编程学习之《标准I/O操作》
- 读取文件操作的标准I/O函数
- C语言文件读写标准I/O库函数的相关操作
- 标准I/O对象与输入输出操作符
- 标准I/O 库函数
- I/O流操作
- UVALive 7327 Digit Division
- 我的ImageMagick使用心得
- GATT协议及蓝牙核心系统结构
- 小火山的计算能力(字符串)
- java多线程---生产者消费者模式
- 系统函数I/O操作与标准库函数流操作
- 读取TXT文件中数据,数据间空格分割
- Openstack-L 路由注入方式
- OC 02 方法
- JPG+mask替代透明Png
- Codeforces Round #223 (Div. 2) E Sereja and Brackets
- POJ 3261Milk Patterns
- 通道和选区的关系
- linux minicom usb串口