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


1.打开

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

  fopen实现打开指定的文件FileName,mode指打开的形式,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. [转]使用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 (Linux内核调试指南 )

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

  8. Windows的进程间通信

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

  9. 检查Linux服务器性能

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

随机推荐

  1. mysql数据库相关知识

    什么是数据库?                数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库.(来自:百度) 什么是sql? 结构化查询语言(Struct ...

  2. Docker技术浅谈:私有化部署的优势以及在顶象内部的应用实践

    顶象全景式业务安全风控体系基于新一代风控体系构建,并采用Docker技术进行私有云和公有云部署.本文主要和大家分享下Docker容器技术和顶象风控系统私有化部署的优势以及Docker容器技术在顶象内部 ...

  3. .net 分布式的未来:微服务

    一.背景&问题 之前框架是一个基于SOA思想设计的分布式框架.各应用通过服务方式提供使用,服务之间通信是RPC方式调用,具体实现基于.NET的WCF通信平台.框架存在如下2个问题: 1.高并发 ...

  4. unity android相互调用

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  5. [flask实践] 解决qq邮箱/mysql的相关配置问题

    笔者经过flask web(Miguel著,封面是一条狗)一书的学习,打算实现一个旅游类网站,在此过程中发现,相对于书中的flasky博客程序,需要作出一些改变: 1. 注册邮箱:国内要使用126,q ...

  6. Nodejs的运行原理-科普篇

    前言 Nodejs目前处境稍显尴尬,很多语言都已经拥有异步非阻塞的能力.阿里的思路是比较合适的,但是必须要注意,绝对不能让node做太多的业务逻辑,他只适合接收生成好的数据,然后或渲染后,或直接发送到 ...

  7. node.js之express框架入门篇

    一.express框架简介 express框架是后台的Node框架,在后台的受欢迎的程度,和jQuery一样 英语官网:http://expressjs.com/ 中文官网:http://www.ex ...

  8. 【NOIP2015提高组】信息传递

    https://www.luogu.org/problem/show?pid=2661 傻逼图论题,把我写成傻逼了. DFS找环,每个结点第二次访问时更新答案. 但是图会有几个连通块,所以要分开讨论. ...

  9. CS Round#53 C Histogram Partition

    题意:给定一个数组A,以及一个初始值全为0的空数组B,每次可以对数组B的任意一个区间内的所有数+x,问至少几次操作能把B数组变成A数组 NOIP原题(积木大赛)升级版,话说CS怎么那么多跟NOIP原题 ...

  10. C语言简单实现链栈基本几个功能(适合新手看,大神可指正)

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...