Linux将所有的硬件设备也当作文件来处理,因此,文件输入输出也是对设备进行操作的基础。文件的IO有两种:

(1) 非缓冲文件操作:

这种操作方式便于对较小规模的文件的读写和对实施行要求很高的设备的数据进行通信,这类操作是系统调用提供的;并且系统只提供了两个文件操作的函数:read()和write()函数。使用的形式为:read(文件标识符,内存块指针,内存块长度);write(文件标识符,内存块指针,内存块长度);其中文件标识符可以是通过open函数打开的文件的标识符,也可以是通过一下三种:

0:标准输入,即通过终端的输入;

1:标准输出,即通过终端的输出;

2:标准错误,系统中存放错误信息的堆栈。

示例:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>#define LENGTH 2048void main()
{char *fileName = "Test.txt";int f,i;char c[LENGTH];if((i=read(0, c, LENGTH)) < 1){perror("read failed:");return ;}f = open(fileName, O_RDWR | O_CREAT, 0664);if(f!=-1){if(write(f, c, i) != i)perror("Write failed:");puts("save file OK!");close(f);}else perror("open file failed!");return ;
}

当然,还有一个函数比较中医,就是lseek(文件标识符,偏移长度, 偏移的起始位置),其中偏移的起始位置可以为SEEK_SET(代表文件的开始位置),SEEK_CUR(代表文件指针的当前位置),SEEK_END(代表文件的末尾位置)。具体用法不再详述。

(2)缓冲文件操作

顾名思义,就是说一部分数据先放在缓冲区中,而当数据的长度要超过缓冲区的范围时才先到物理设备上去,这是通过调用C语言的库函数来实现,因此是C中的标准,故一些实现的函数跟以前学过的一样。标准输入输出库中定义来文件流结构指针FILE*来作为文件的标识,并且同时提供来一系列的缓冲文件操作函数,对应的有三个文件流是系统定义的,分别是:

stdin:标准输入;

stdout:标准输出;

dtderr:标准错误。

缓冲文件操作函数:

fopen(路径,打开方式);其中打开方式为r或rb,w或wb,a或ab等等,没有创建新文件的功能。

fread(缓冲区指针,长度,数量,文件流指针);

fwrite(缓冲区指针,长度,数量,文件流指针);

示例代码:

char buf[SZIE];
FILE * fp = fopen("Test.txt", "r"); //以只读方式打开
fread(buf, LENGTH, SIZE/LENGTH, fp);//其中LENGTH为buf的长度,SIZE为缓冲区的长度,这样就通过每次都读取LENGTH长度,然后全部读入buf中
fclose(fp);fp = fopen("cope.txt", "rw+"); //以读写的方式打开
fwrite(buf, LENGTH, SIZE/LENGTH, fp);//这样就把数据写入到文件中了
fclose(fp);

下边是文件流的格式化输入与输出:

fscanf(文件流指针,“控制字符串”,输出项列表);

fprintf(文件流指针,“控制字符串”,输出项列表);

示例:

struct buddy
{char name[50];unsigned int tel;char address[200];
}struct buddy bd;if(create("buddy", 0664) == -1)
{perror("创建文件错误!");return ;
}
FILE *fp;
fp = fopen("buddy", "rw+");
fprintf(fp, "<name>%s,<tel>%d,<address>%s","tom",12345,"China");
close(fp);fp = fopen("buddy","rw+");
fscanf(fp, "<name>%s,<tel>%d,<address>%s",bd.name, &bd.tel, bd.address);
fclose(fp);printf("<name>%s,<tel>%d,<address>%s",bd.name,&bd.tel,bd.address);

文件流的定位操作:

fgetpos,fsetpos,Ftell,rewind等函数用于对文件流进行定位操作。

Linux学习之文件I/O操作相关推荐

  1. Linux 学习笔记 文件、目录操作与用户群组权限

    一.命令行提示符 1.1 命令行基础 bearpi:当前用户名,在@前是用户名 ubuntu:用户所在的域名,在@后面,这是我自定义的,默认应该是主机名 ~ 波浪线为目前所在目录,~代表家目录(hom ...

  2. Linux系统下文件与目录操作

    Linux系统下文件与目录操作  与其它操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的.所以在使用Linux的过程中,是经常要对文件与目录进行操作的.现在我们就以一个Windo ...

  3. Linux学习笔记-文件权限与路径

    Linux学习笔记-文件与目录 目前从电子信息科学与技术转到了计算机专业,因此想趁着大四比较闲的时候补一些计算机的知识.我想说:你好,生活[斜眼笑]!愿生活温柔以待!哈哈,这是我写的第一篇博客,谨以此 ...

  4. Linux学习笔记 文件服务Vsftp详细介绍

    Linux学习笔记 文件服务Vsftp详细介绍 知识点: 1.FTP使用TCP连接和TCP端口 2.在进行通信时,FTP需要建立两个TCP连接: 一个用于控制信息,TCP端口号缺省为21 一个用于数据 ...

  5. Linux系统下文件与目录操作讲解

    Linux系统下文件与目录操作 在Linux系统中有一句话叫做,一切皆文件.上节我们说的I/O操作,对于普通I/O操作,都是打开.读写.关闭.这节我们通过stat结构体来了解文件的一些基本信息和本质特 ...

  6. Linux命令:文件和目录操作

    Linux命令:文件和目录操作 >文件是Linux用来存储信息的基本结构, 它是被命名(称为文件名)的存储在某种介质(如磁盘.光盘.磁带等)上的一组信息的集合. >Linux系统文件以文件 ...

  7. linux 文件目录操作,Linux系统下文件与目录操作

    与其它操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的.所以在使用Linux的过程中,是经常要对文件与目录进行操作的.现在我们就以一个Window用户的立场来学习一下Linux下 ...

  8. Linux学习笔记——文件IO

    文章目录 前言 C语言操作文件的函数 系统接口 文件描述符 文件系统 动态库和静态库 前言   在系统角度理解文件:文件=内容+属性,内容和属性都是数据,对于文件的所有操作无外乎对于文件内容操作和对于 ...

  9. Linux学习-74-NTFS文件系统安装教程

    16.17 NTFS文件系统安装教程 在 CentOS 6.x 中,默认 NTFS 文件系统是没有安装的,也就是说在 CentOS 6.x 中是不能直接挂载 NTFS 分区的.但是目前 Windows ...

最新文章

  1. jquery入门 修改网页背景颜色
  2. 自定义控件 DotNetBar
  3. win7‘上帝模式’
  4. 【python】简单记录
  5. 「PowerBI」分析服务多维数据结构重回关系数据库的一大绝招
  6. 【算法】剑指 Offer 66. 构建乘积数组
  7. 收发一体超声波测距离传感器模块_超声波避障传感器在哪些地方运用
  8. FPGA 实现 RGB 图像转 Gray
  9. 【Luogu1111】修复公路(MST模板)
  10. Richard Hamming:You and your research
  11. XTU OJ String game
  12. rose怎么画业务流程图_子流程图怎么画(流程图中的子流程)
  13. win10 资源管理器无限闪退
  14. 避免使用std::dynamic_pointer_cast
  15. 那些忍了很久的话——人工智能盲目跟风该休了
  16. 汇编语言与微机原理(1)基础知识
  17. windows下discus的搭建
  18. COJ1978-LXX的图论题
  19. Python--龟兔赛跑游戏
  20. linux命令:查看本机IP地址 curl ip.gs

热门文章

  1. 计算机基础课小论文,计算机基础课程论文参考文献大全 哪里有计算机基础课程参考文献...
  2. java web 网课_中国大学MOOCJava Web开发基础网课答案
  3. 豆瓣电影的API接口豆瓣电影详情即将上映新片榜短影评
  4. 行星轨迹制作_探知宇宙!八大行星手工制作,和孩子一起探索宇宙奥秘,宝宝妈收 !(附教程)...
  5. 单片机——IIC协议与24C02
  6. base64 hex java_Java 中的 BASE64 和 十六进制转换器
  7. Android (内置)预装应用
  8. STDP学习机制(使用Brian2仿真)
  9. 每天笑一笑2012年8月27日
  10. 酷讯网半年内两换CEO 风投要业绩被指心太急