Linux文件编程实例

  1. //捕获fopen调用中的错误
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #define MYFILE "missing.txt"
  6. int main(  )
  7. {
  8. FILE* fin;
  9. fin=fopen( MYFILE,"r" );
  10. if( fin==(FILE*)NULL )
  11. {
  12. printf( "%s: %s\n",MYFILE,strerror( errno ) );
  13. exit( -1 );
  14. }
  15. fclose( fin );
  16. return 0;
  17. }
  18. /*数据的读写
  19. 标准的I/O库提供了缓冲接口。有两个非常重要的属性:
  20. 1、系统是分块进行读写的(一个块通常8KB)。字符I/O都写到FILE缓冲区中,
  21. 这个缓冲区满的时候会自动写入介质;
  22. 2、如果数据需要送到像控制台终端这样的交互设备,必须设置fflush或者非缓冲
  23. I/O
  24. */
  25. /********字符接口**********/
  26. //fputc字符接口实例
  27. #include <stdio.h>
  28. #include <errno.h>
  29. int main(  )
  30. {
  31. int i=0;
  32. FILE* fout;
  33. const char string[  ]={
  34. "This\r\nis a test\r\nfile.\r\n\0"
  35. };
  36. fout=fopen("inpfile.txt","w");
  37. if( fout==( FILE* )NULL )
  38. {
  39. printf( "%s: %s\n","inpfile.txt",strerror( errno ) );
  40. exit( -1 );
  41. }
  42. while( string[ i ]!=NULL )
  43. {
  44. fputc( ( int )string[ i ],fout );
  45. ++i;
  46. }
  47. fclose( fout );
  48. return 0;
  49. }
  50. //fgetc字符接口实例
  51. #include <stdio.h>
  52. #include <errno.h>
  53. int main(  )
  54. {
  55. FILE* fin;
  56. fin=fopen( "inpfile.txt","r" );
  57. if( fin==( FILE* )NULL )
  58. {
  59. printf( "%s: %s\n","inpfile.txt",strerror( errno ) );
  60. exit( -1 );
  61. }
  62. int i;
  63. while( (i=fgetc( fin ))&&i!=EOF )
  64. {
  65. printf( "%c",(char)i );
  66. }
  67. return 0;
  68. }
  69. /*
  70. fputc(  )是向文件中写入数据;fgetc是从文件中读取数据
  71. 总结:字符接口使用简单,但是效率不高,最好是在基于字符串的方法不可使用时才使用字符接口
  72. */
  73. /************字符串接口************/
  74. /*提供字符串读写函数4个。fputs和fgets是简单的字符串接口;
  75. fprintf和fscanf更复杂的接口,但提供了更多的功能。
  76. */
  77. //相文件中写入变长字符串
  78. #include <stdio.h>
  79. #include <errno.h>
  80. #include <stdlib.h>
  81. #define LEN 80
  82. int main(  )
  83. {
  84. char line[ LEN+1 ];
  85. FILE* fout;
  86. FILE* fin;
  87. //写入数据
  88. fout=fopen( "testfile.txt","w" );
  89. if( fout==( FILE* )NULL )
  90. {
  91. printf( "%s: %s\n","testfile.txt",strerror( errno ) );
  92. exit( -1 );
  93. }
  94. fin=fdopen( 0,"r" ); //将fin与标准输入流绑定
  95. printf( "Please input some characters,end with CTRL+D:\n" );
  96. //CTRL+D结束输入
  97. while( ( fgets(line,LEN,fin) )!=NULL )
  98. {
  99. fputs( line,fout );
  100. }
  101. fclose( fout );
  102. fclose( fin );
  103. //读取数据
  104. printf( "\nthe characters read from file is:\n" );
  105. char getLine[ LEN+1 ];
  106. fin=fopen( "testfile.txt","r" );
  107. if( fin==(FILE*)NULL )
  108. {
  109. printf( "%s: %s\n","testfile.txt",strerror( errno ) );
  110. exit( -1 );
  111. }
  112. fgets( getLine,LEN,fin );
  113. printf( "%s\n",getLine );
  114. fclose( fin );
  115. return 0;
  116. }
  117. /*fputs向文件中写入,fgets从文件中读取
  118. 总结:要注意不可以同时读写同一个文件。
  119. */
  120. //以ASCII格式输出结构体数据
  121. #include <stdio.h>
  122. #include <errno.h>
  123. #define MAX_LINE 40
  124. #define FILENAME "myfile.txt"
  125. typedef struct
  126. {
  127. int id;
  128. float x_coord;
  129. float y_coord;
  130. char name[ MAX_LINE+1 ];
  131. }MY_TYPE_T;
  132. #define MAX_OBJECTS 3
  133. /*Initialize an array of three objects*/
  134. MY_TYPE_T objects[ MAX_OBJECTS ]={
  135. {0,1.5,8.3,"Frist-object"},
  136. {1,4.5,6.3,"Second-object"},
  137. {2,3.5,7.5,"Thrid-object"},
  138. };
  139. int main(  )
  140. {
  141. int i;
  142. FILE* fout;
  143. fout=fopen(FILENAME,"w" );
  144. if( fout==( FILE* )NULL )
  145. {
  146. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  147. exit( -1 );
  148. }
  149. printf( "Writing...\n" );
  150. for( i=0;i<MAX_OBJECTS;++i )
  151. {
  152. fprintf( fout,"%d %f %f %s\n",objects[ i ].id,objects[ i ].x_coord,
  153. objects[ i ].y_coord,objects[ i ].name);
  154. }
  155. fclose( fout );
  156. printf("Write over\n");
  157. printf("Read from file\n");
  158. FILE* fin=fopen( FILENAME,"r" );
  159. if( fin==(FILE*)NULL )
  160. {
  161. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  162. exit( -1 );
  163. }
  164. MY_TYPE_T objects;
  165. while( !feof(fin) )
  166. {
  167. fscanf( fin,"%d %f %f %s\n",&objects.id,&objects.x_coord,
  168. &objects.y_coord,&objects.name);
  169. printf("%d %f %f %s\n",objects.id,objects.x_coord,
  170. objects.y_coord,objects.name);
  171. }
  172. fclose( fin );
  173. return 0;
  174. }
  175. /**************二进制文件的读写*****************/
  176. /*使用fwirte、fread进行二进制文件的读写
  177. 读写二进制文件的时候,要注意的重要问题是可移植性和字序问题。
  178. Intel采用小字节序,PowerPC和网络采用大字节序
  179. */
  180. #include <stdio.h>
  181. #include <errno.h>
  182. #define MAX_LINE 40
  183. #define FILENAME "myfile.bin"
  184. typedef struct
  185. {
  186. int id;
  187. float x_coord;
  188. float y_coord;
  189. char name[ MAX_LINE+1 ];
  190. }MY_TYPE_T;
  191. #define MAX_OBJECTS 3
  192. /*Initialize an array of three objects*/
  193. MY_TYPE_T objects[ MAX_OBJECTS ]={
  194. {0,1.5,8.3,"Frist-object"},
  195. {1,4.5,6.3,"Second-object"},
  196. {2,3.5,7.5,"Thrid-object"},
  197. };
  198. int main(  )
  199. {
  200. int i;
  201. FILE* fout;
  202. fout=fopen(FILENAME,"w" );
  203. if( fout==( FILE* )NULL )
  204. {
  205. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  206. exit( -1 );
  207. }
  208. printf( "Writing...\n" );
  209. fwrite( ( void* )objects,sizeof( MY_TYPE_T ),3,fout );
  210. fclose( fout );
  211. //使用fread/fseek/rewind读取二进制结构体数据
  212. printf( "Read from file\n" );
  213. MY_TYPE_T object;
  214. FILE* fin=fopen( FILENAME,"r" );
  215. if( fin==( FILE* )NULL )
  216. {
  217. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  218. exit( -1 );
  219. }
  220. //定位到第三个结构体
  221. fseek( fin,( 2*sizeof( MY_TYPE_T ) ),SEEK_SET );
  222. fread( &object,sizeof( MY_TYPE_T ),1,fin );
  223. printf("%d %f %f %s\n",object.id,object.x_coord,
  224. object.y_coord,object.name);
  225. fseek( fin,( 1*sizeof( MY_TYPE_T ) ),SEEK_SET );
  226. fread( &object,sizeof( MY_TYPE_T ),1,fin );
  227. printf("%d %f %f %s\n",object.id,object.x_coord,
  228. object.y_coord,object.name);
  229. //把文件指针复位到文件开头
  230. rewind( fin );
  231. fread( &object,sizeof( MY_TYPE_T ),1,fin );
  232. printf("%d %f %f %s\n",object.id,object.x_coord,
  233. object.y_coord,object.name);
  234. fclose( fin );
  235. return 0;
  236. }
  237. /************************************************/
  238. /*
  239. 总结:上面所有的函数都是有一些基本API来实现的。比如:open/read/write/fdopen/pread/pwrite.
  240. 文件的输入输出API函数也可以用于管道和套接字。另外,文件和字符串操作是面向对象脚本语言的强项,如Ruby,Python.
  241. */

Linux文件编程实例

时间: 2024-10-17 00:40:33

Linux文件编程实例的相关文章

多功能电子通讯录(涉及到了双向链表的使用,Linux文件编程等等)

readme.txt //作为一个程序员,我们咋么能不写用户手册呢!MSP的我觉得用户体验是王道,苹果手机的用户体验的确不错!不过WP加油!我去,扯远了!赶紧看我的程序吧!  歡迎使用多功能電子通訊錄V1.0版本        如有BUG敬請原諒     make  之後便可以使用     ./ebook  運行本程序     make clean 清理本程序中間文件     make cleanall 清除所有非源程序文件 PS:我本想直接给大家看代码的,但是在这个过程中,重要不仅仅是代码,首

Linux c编程实例_例子

例一:字符与整型变量的实现 #include <stdio.h> int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3='c'-32; printf("c1 is %d and c2 is %d\n",c1,c2); printf("c3 is %d and %c\n",c3,c3); //字符在内存中是以ASCII码存在的, a就是65等等 //字符型变量可以与整型变量进行运算 } 结果

8.Linux文件编程

文件描述符: ????在Linux系统中,所有打开的文件对应一个数字,这个数字我们称为:文件描述符. 下面我们通过下面的几个函数来入门: 打开文件: 在命令行执行:man open.得到下面的信息. 我们从帮助文档知道:open函数的功能是:open and possibly create a file or device.该函数有两种形式存在: int open(const char *pathname, int flags); int open(const char *pathname, i

Linux 多线程编程实例

一.多线程 VS 多进程 和进程相比,线程有很多优势.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护代码段和数据.而运行于一个进程中的多个线程,他们之间使用相同的地址空间.正是这样,同一进程下的线程之间共享数据空间,数据可以相互使用,并且线程间切换也要更快些,可以更有效的利用CPU. 二.程序设计 [注] 头文件<pthread.h> 编译时要加载动态库 libpthread.a,使用 -lpthread 1.创建线程2.等待线程3.关闭线程4.退出清除

Linux多进程编程实例

前言:编写多进程程序时,我们应该了解一下,创建一个子进程时,操作系统内核是怎样做的.当通过fork函数创建新的子进程时,内核将父进程的用户地址空间的内容复制给子进程,这样父子进程拥有各自独立的用户空间,当父进程修该变量的值时不会影响子进程中的相应变量.但为了提高效率,Linux采用了COW(copy on write)算法,子进程创建时,父子进程享有相同的地址空间,只是在页表中设置cow标识,只有在父进程或子进程执行写数据操作时,才为子进程申请一个物理页,将父进程空间中相应数据所在页的内容复制到

linux 文件编程c语言操作系统调用函数总结(一)

#include <fcntl.h> int open(const char *path, int oflag, ... /* mode_t mode */ ); int openat(int fd, const char *path, int oflag, ... /* mode_t mode */ ); open函数调用成功返回打开文件的文件描述符,失败时返回-1.oflag参数表明打开文件的状态标志,必须且只能包含以下5个标志中的一个: O_RDONLY:只读打开 O_WRONLY:只写

Linux管道编程实例

#include <unistd.h> #include <signal.h> #include <stdio.h> char parent[] = "a message from parrent"; char child[] = "a message from child"; main () { int chan1[2], chan2[2]; int pid; char buf[100]; pipe(chan1); pipe(c

linux网络编程实例

获取服务器时间 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #

Linux 多线程编程 实例 2

编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC….依次递推. 使用条件变量来实现: #include <pthread.h>#include <stdio.h>#include <unistd.h>static pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t condA ;s