Linux文件编程实例
- //捕获fopen调用中的错误
- #include <stdio.h>
- #include <errno.h>
- #include <string.h>
- #define MYFILE "missing.txt"
- int main( )
- {
- FILE* fin;
- fin=fopen( MYFILE,"r" );
- if( fin==(FILE*)NULL )
- {
- printf( "%s: %s\n",MYFILE,strerror( errno ) );
- exit( -1 );
- }
- fclose( fin );
- return 0;
- }
- /*数据的读写
- 标准的I/O库提供了缓冲接口。有两个非常重要的属性:
- 1、系统是分块进行读写的(一个块通常8KB)。字符I/O都写到FILE缓冲区中,
- 这个缓冲区满的时候会自动写入介质;
- 2、如果数据需要送到像控制台终端这样的交互设备,必须设置fflush或者非缓冲
- I/O
- */
- /********字符接口**********/
- //fputc字符接口实例
- #include <stdio.h>
- #include <errno.h>
- int main( )
- {
- int i=0;
- FILE* fout;
- const char string[ ]={
- "This\r\nis a test\r\nfile.\r\n\0"
- };
- fout=fopen("inpfile.txt","w");
- if( fout==( FILE* )NULL )
- {
- printf( "%s: %s\n","inpfile.txt",strerror( errno ) );
- exit( -1 );
- }
- while( string[ i ]!=NULL )
- {
- fputc( ( int )string[ i ],fout );
- ++i;
- }
- fclose( fout );
- return 0;
- }
- //fgetc字符接口实例
- #include <stdio.h>
- #include <errno.h>
- int main( )
- {
- FILE* fin;
- fin=fopen( "inpfile.txt","r" );
- if( fin==( FILE* )NULL )
- {
- printf( "%s: %s\n","inpfile.txt",strerror( errno ) );
- exit( -1 );
- }
- int i;
- while( (i=fgetc( fin ))&&i!=EOF )
- {
- printf( "%c",(char)i );
- }
- return 0;
- }
- /*
- fputc( )是向文件中写入数据;fgetc是从文件中读取数据
- 总结:字符接口使用简单,但是效率不高,最好是在基于字符串的方法不可使用时才使用字符接口
- */
- /************字符串接口************/
- /*提供字符串读写函数4个。fputs和fgets是简单的字符串接口;
- fprintf和fscanf更复杂的接口,但提供了更多的功能。
- */
- //相文件中写入变长字符串
- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #define LEN 80
- int main( )
- {
- char line[ LEN+1 ];
- FILE* fout;
- FILE* fin;
- //写入数据
- fout=fopen( "testfile.txt","w" );
- if( fout==( FILE* )NULL )
- {
- printf( "%s: %s\n","testfile.txt",strerror( errno ) );
- exit( -1 );
- }
- fin=fdopen( 0,"r" ); //将fin与标准输入流绑定
- printf( "Please input some characters,end with CTRL+D:\n" );
- //CTRL+D结束输入
- while( ( fgets(line,LEN,fin) )!=NULL )
- {
- fputs( line,fout );
- }
- fclose( fout );
- fclose( fin );
- //读取数据
- printf( "\nthe characters read from file is:\n" );
- char getLine[ LEN+1 ];
- fin=fopen( "testfile.txt","r" );
- if( fin==(FILE*)NULL )
- {
- printf( "%s: %s\n","testfile.txt",strerror( errno ) );
- exit( -1 );
- }
- fgets( getLine,LEN,fin );
- printf( "%s\n",getLine );
- fclose( fin );
- return 0;
- }
- /*fputs向文件中写入,fgets从文件中读取
- 总结:要注意不可以同时读写同一个文件。
- */
- //以ASCII格式输出结构体数据
- #include <stdio.h>
- #include <errno.h>
- #define MAX_LINE 40
- #define FILENAME "myfile.txt"
- typedef struct
- {
- int id;
- float x_coord;
- float y_coord;
- char name[ MAX_LINE+1 ];
- }MY_TYPE_T;
- #define MAX_OBJECTS 3
- /*Initialize an array of three objects*/
- MY_TYPE_T objects[ MAX_OBJECTS ]={
- {0,1.5,8.3,"Frist-object"},
- {1,4.5,6.3,"Second-object"},
- {2,3.5,7.5,"Thrid-object"},
- };
- int main( )
- {
- int i;
- FILE* fout;
- fout=fopen(FILENAME,"w" );
- if( fout==( FILE* )NULL )
- {
- printf( "%s: %s\n",FILENAME,strerror( errno ) );
- exit( -1 );
- }
- printf( "Writing...\n" );
- for( i=0;i<MAX_OBJECTS;++i )
- {
- fprintf( fout,"%d %f %f %s\n",objects[ i ].id,objects[ i ].x_coord,
- objects[ i ].y_coord,objects[ i ].name);
- }
- fclose( fout );
- printf("Write over\n");
- printf("Read from file\n");
- FILE* fin=fopen( FILENAME,"r" );
- if( fin==(FILE*)NULL )
- {
- printf( "%s: %s\n",FILENAME,strerror( errno ) );
- exit( -1 );
- }
- MY_TYPE_T objects;
- while( !feof(fin) )
- {
- fscanf( fin,"%d %f %f %s\n",&objects.id,&objects.x_coord,
- &objects.y_coord,&objects.name);
- printf("%d %f %f %s\n",objects.id,objects.x_coord,
- objects.y_coord,objects.name);
- }
- fclose( fin );
- return 0;
- }
- /**************二进制文件的读写*****************/
- /*使用fwirte、fread进行二进制文件的读写
- 读写二进制文件的时候,要注意的重要问题是可移植性和字序问题。
- Intel采用小字节序,PowerPC和网络采用大字节序
- */
- #include <stdio.h>
- #include <errno.h>
- #define MAX_LINE 40
- #define FILENAME "myfile.bin"
- typedef struct
- {
- int id;
- float x_coord;
- float y_coord;
- char name[ MAX_LINE+1 ];
- }MY_TYPE_T;
- #define MAX_OBJECTS 3
- /*Initialize an array of three objects*/
- MY_TYPE_T objects[ MAX_OBJECTS ]={
- {0,1.5,8.3,"Frist-object"},
- {1,4.5,6.3,"Second-object"},
- {2,3.5,7.5,"Thrid-object"},
- };
- int main( )
- {
- int i;
- FILE* fout;
- fout=fopen(FILENAME,"w" );
- if( fout==( FILE* )NULL )
- {
- printf( "%s: %s\n",FILENAME,strerror( errno ) );
- exit( -1 );
- }
- printf( "Writing...\n" );
- fwrite( ( void* )objects,sizeof( MY_TYPE_T ),3,fout );
- fclose( fout );
- //使用fread/fseek/rewind读取二进制结构体数据
- printf( "Read from file\n" );
- MY_TYPE_T object;
- FILE* fin=fopen( FILENAME,"r" );
- if( fin==( FILE* )NULL )
- {
- printf( "%s: %s\n",FILENAME,strerror( errno ) );
- exit( -1 );
- }
- //定位到第三个结构体
- fseek( fin,( 2*sizeof( MY_TYPE_T ) ),SEEK_SET );
- fread( &object,sizeof( MY_TYPE_T ),1,fin );
- printf("%d %f %f %s\n",object.id,object.x_coord,
- object.y_coord,object.name);
- fseek( fin,( 1*sizeof( MY_TYPE_T ) ),SEEK_SET );
- fread( &object,sizeof( MY_TYPE_T ),1,fin );
- printf("%d %f %f %s\n",object.id,object.x_coord,
- object.y_coord,object.name);
- //把文件指针复位到文件开头
- rewind( fin );
- fread( &object,sizeof( MY_TYPE_T ),1,fin );
- printf("%d %f %f %s\n",object.id,object.x_coord,
- object.y_coord,object.name);
- fclose( fin );
- return 0;
- }
- /************************************************/
- /*
- 总结:上面所有的函数都是有一些基本API来实现的。比如:open/read/write/fdopen/pread/pwrite.
- 文件的输入输出API函数也可以用于管道和套接字。另外,文件和字符串操作是面向对象脚本语言的强项,如Ruby,Python.
- */
Linux文件编程实例的更多相关文章
- linux内核模块编程实例
linux内核模块编程实例 学号:201400814125 班级:计科141 姓名:刘建伟 1.确定本机虚拟机中的Ubuntu下Linux的版本 通过使用命令uname -a/uname -r/una ...
- linux文件编程----系统调用
linux中文件编程可以使用两种方法: 1).linux系统调用 2).C语言库函数 前者依赖于linux系统,后者与操作系统是独立的. 在 linux系统中,所有打开的文件也对应一个数字,这个数字由 ...
- Linux 文件编程、时间编程基本函数
文件编程 文件描述符 fd --->>>数字(文件的身份证,代表文件身份),通过 fd 可找到正在操作或需要打开的文件. 基本函数操作: 1)打开/创建文件 int open (co ...
- Linux多线程编程实例解析
Linux系统下的多线程遵循POSIX线程接口,称为 pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a.顺便说一下,Linux ...
- Linux c编程实例_例子
例一:字符与整型变量的实现 #include <stdio.h> int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3=; ...
- 多功能电子通讯录(涉及到了双向链表的使用,Linux文件编程等等)
readme.txt //作为一个程序员,我们咋么能不写用户手册呢!MSP的我觉得用户体验是王道,苹果手机的用户体验的确不错!不过WP加油!我去,扯远了!赶紧看我的程序吧! 歡迎使用多功能電子通訊錄 ...
- Linux网络编程实例解析
**************************************************************************************************** ...
- linux 定时器编程实例(完善中).....
最近在写linux 下的定时器编程实验,测试发现 usleep函数在 x86 架构下的定时还是比较准确的,在arm9下 就不太准了. 今天用linux 下的setitimer()函数进行了定时 器的测 ...
- Linux多进程编程实例
前言:编写多进程程序时,我们应该了解一下,创建一个子进程时,操作系统内核是怎样做的.当通过fork函数创建新的子进程时,内核将父进程的用户地址空间的内容复制给子进程,这样父子进程拥有各自独立的用户空间 ...
随机推荐
- 图论(网络流):[SCOI2015]小凸玩矩阵
Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最 ...
- 数据结构(线段树):HDU 5649 DZY Loves Sorting
DZY Loves Sorting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...
- 【数学】CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1810 题目大意: 一个长度为N的十进制数,R(i,j)表示将第i位到第j位翻转过来后的 ...
- c#反序列化
C#序列化(转载) 2011-03-15 | 凯之风 | 转藏(2) 序列化有下列要求: A> 只序列化PUBLIC的成员变量和属性 B> 类必须有默认识构造函数 C> 如果 ...
- 《程序设计中的组合数学》——polya计数
我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...
- G - Supermarket poj1456
题目的描述很长,其实描述的问题很简单,说有n的商品,它们每个的价值是pi,但是呢,再过di天这些商品就不能卖了(有可能过期了...),现在给出来每个商品的价值和可以卖的最后期限,问可以得到最多多少资金 ...
- IT项目经理应具备的十大软技能
现在,企业对IT部项目经理的要求越来越多.如果你认为IT项目成员只需要技术性能力,那可就错了. 据IT招聘公司调查发现,几年人们对项目管理软技能的兴趣明显浓厚起来.许多企业尽量避免把IT部门看成只是成 ...
- sqlserver使用户只能在某个架构下建立表和存储过程
1.首先,建立一个用户之后,默认的架构是dbo,默认的角色是public.这种情况下,这个用户将看不到dbo以及其他架构下的对象.除非单独进行授权. 2.新建一个架构test,然后使得这个架构的所 ...
- python推荐淘宝物美价廉商品 2.0
改动: 新增功能 :可选择只看天猫或淘宝 代码模块化封装,参数配置或输入单独在一个py文件管理,主函数功能只留出参数传入在setting配置的py文件里. main.py代码: # -*- codin ...
- jQuery Ajax 实例 具体介绍$.ajax、$.post、$.get的使用
Jquery在异步提交方面封装的非常好.直接用AJAX非常麻烦须要处理浏览器之间的兼容问题,Jquery大大简化了我们的这些操作操作.不用在考虑浏览器这方面的问题,能够直接使用! $.post.$.g ...