用于文件系统的C库函数

时间:2022-02-13 23:57:08

9/20/2017 学<LINUX C编程实战》中


1.打开

File *fopen(const char *path , const char * mode);

  fopen实现打开指定的文件FileName,mode指打开的形式,C语言中打开的形式种类如下:

  用于文件系统的C库函数

  用于文件系统的C库函数

  b用于打开二进制文件而非文本文件,这是DOS、Windows下的情况。在Linux中不区分二进制文件和文本文件。

  同时注意,标志都是const char * 类型,即都是字符串字面值,需要用到双引号,写成fopen(”1.txt" , r); 是错误的。

  由于fopen();的返回值是FILE *类型,所以利用一个相同类型的对象如fp去标识fopen();,即fp标识目标文件。之后对fp的操作即是对目标文件的操作。  

2.读写

  支持字符串、字符等单位进行读写文件。

int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *stream, const char *format, ...);
int fscanf (FILE *stream, const char *format, ...);
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
size_t fwrite (const void *ptr, size_t size, size_t n, FILE *stream);

  fread();:实现从流stream中读出n个字段,每个字段长size个字节,并将n个字段放入名为ptr的字符数组中,返回实际读取的字段数。

  fwrite();:实现从缓冲区ptr所指的数组中把n个字段写入流stream,每个字段长size个字节,返回实际写入的字段数。

  fputs();:实现了把字符串写入流stream中。参数s是一个数组,包含了以'\0'为结尾的字符序列。参数stream是指向FILE对象的指针,该对象标识了要被写入的流。返回值:成功的话返回一个非负值,失败的话返回一个EOF。

  注意如果要实现output功能,需要用一个字符串数组存储内容并输出,fputs();是向文件中”ouput“,即写入文件,并非输出文件。

3.定位

int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);
int fseek(FILE *stream, long offset, int whence);

  返回值:成功返回0,否则返回非0。

  用法如下:

#include <stdio.h>

int main ()
{
FILE *fp;
fpos_t position; fp = fopen("file.txt","w+");
fgetpos(fp, &position);
fputs("Hello, World!", fp); fsetpos(fp, &position);
fputs("这将覆盖之前的内容", fp);
fclose(fp); return();
}

  创建一个文件file.txt,并以读写的方式打开,首先使用fgetpos();获取文件的初始位置,写入“Hello, World!",然后使用fsetpos();重置为文件头的位置。再写入”这将覆盖之前的内容“,实现内容的覆盖。最终输出”浙江覆盖之前的内容“。

  

4.关闭

int fclose(FILE *stream);

  关闭流stream,刷新缓冲区。参数stream是FILE对象的指针,该对象指定了要被关闭的流。

  返回值:成功关闭返回0,失败返回EOF。

例程:

  编写一个程序,在当前目录下创建用户可读写文件“hello.txt”,在其中写入“Hello, software weekly”,关闭该文件。再次打开该文件,读取其中的内容并输出在屏幕上。

  

 #include <stdio.h>
#define LENGTH 100 int main()
{
FILE *fp;
char str[LENGTH];
fp = fopen("hello2.txt" , "w+");
if(fp)
{
fputs("Hello,software weekly" , fp);
fclose(fp);
}
fp = fopen("hello2.txt" , "r");
fgets(str , LENGTH , fp);
printf("%s\n" , str);
return ;
}

  output:bw98@ubuntu:~/Practice/project3$ ./2
     Hello,software weekly

用于文件系统的C库函数的更多相关文章

  1. &lbrack;转&rsqb;使用fdisk磁盘分区和 Linux 文件系统

    概述 在本文中,学习磁盘分区和 Linux 文件系统相关内容.学习: 创建分区 使用 mkfs 命令来设置 ext2.ext3.ext4.xfs.Reiser v3 和 vfat 文件系统 创建和管理 ...

  2. iozone - a filesystem benchmark tool 主要是用来测试文件系统 性能

    简介:    磁盘设备之上是文件系统,测试磁盘的工具往往就是调用块设备驱动的接口进行读写测试.而文件系统的测试软件就是针对文件系统层提供的功能进行测试,包括文件的打开关闭速度以及顺序读写随机位置读写的 ...

  3. NFS启动文件系统

    NFS启动文件系统 一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E ...

  4. Linux 文件系统缓存 -针对不同数据库有不同作用

    文件系统缓存 filesystem cache 许多人没有意识到.文件系统缓存对于性能的影响.Linux系统默认的设置倾向于把内存尽可能的用于文件cache,所以在一台大内存机器上,往往我们可能发现没 ...

  5. linux内核调试指南

    linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...

  6. 嵌入式设备上的 Linux 系统开发

    转载:http://www.ibm.com/developerworks/cn/linux/embed/embdev/index.html   如果您刚接触嵌入式开发,那么大量可用的引导装载程序(bo ...

  7. Linux Kernel - Debug Guide &lpar;Linux内核调试指南 &rpar;

    http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 ...

  8. Windows的进程间通信

    对于任何一个现代的操作系统,进程间通信都是其系统结构的一个重要组成部分.而说到Windows的进程(线程)间通信,那就要看是在什么意义上说了.因为正如"Windows的跨进程操作" ...

  9. 检查Linux服务器性能

    如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在? 概述通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. • uptime• ...

随机推荐

  1. MySQL的恢复脚本

    原文转自: http://blog.csdn.net/dbanote/article/details/13295727 应用场景: ********************************** ...

  2. lucene文件格式待整理

    这是之前Lucene3.0生成的索引格式 a表

  3. Hdu 1507 Uncle Tom&&num;39&semi;s Inherited Land&ast; 分类: Brush Mode 2014-07-30 09&colon;28 112人阅读 评论&lpar;0&rpar; 收藏

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  4. POJ 1236

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10500   Accepted: 41 ...

  5. powerMock比easyMock和Mockito更强大(转)

    powerMock是基于easyMock或Mockito扩展出来的增强版本,所以powerMock分两种类型,如果你习惯于使用easyMock的,那你就下载基于easyMock的powerMock,反 ...

  6. hdu2389(HK算法)

    传送门:Rain on your Parade 题意:t个单位时间后开始下雨,给你N个访客的位置(一维坐标平面内)和他的移动速度,再给M个雨伞的位置,问在下雨前最多有多少人能够拿到雨伞(两个人不共用一 ...

  7. 什么是WAL?

    在写完上一篇<Pull or Push>之后,原本计划这一片写<存储层设计>,但是临时改变主意了,想先写一篇介绍一下消息中间件最最基础也是最核心的部分:write-ahead ...

  8. NAND Flash vs NOR Flash

    Avinash Aravindan reference:https://www.embedded.com/design/prototyping-and-development/4460910/2/Fl ...

  9. word 公式为图片

  10. AutoMapper queryable extensions 只找需要的字段

    http://jahav.com/blog/automapper-queryable-extensions/ How to generate a LINQ query for your DTOs Au ...