Linux思想即,Linux系统下一切皆文件。

一、对文件操作的几个函数

1.打开文件open函数

int open(const char *path, int oflags);

int open(const char *path, int oflags,mode_t mode);

– 参数path表示:路径名或者文件名。路径名为绝对路径名。

– 参数oflags表示:打开文件所采取的动作。

下面几个为常用参数:

O_RDONLY文件只读;O_WRONLY文件只写;O_RDWR文件可读可写;O_NOCTTY如果路径指向终端,则不将设备作为此进程的控制终端;O_NDELAY非阻塞方式操作文件。

– mode表示:设置创建文件的权限。权限的宏定义很麻烦,可以直接用数字替代

– 返回值:出错返回-1;否则返回文件句柄

2.打开文件creat函数(其主要作用为创建文件):

• int creat(const char * pathname, mode_t mode);

– 参数path表示:路径名或者文件名。路径名为绝对路径名。

– 参数oflags表示:打开文件所采取的动作。

• O_RDONLY文件只读;O_WRONLY文件只写;O_RDWR文件可读可写

3.关闭文件close函数:

int close(int fd);

参数为打开文件的句柄

4.写文件write函数:

• ssize_t write(int fd, const void *buf, size_t count);

– 参数fd表示:使用open 函数打开文件之后返回的句柄。

– 参数*buf表示:写入的数据

– 参数count表示:最多写入字节数

– 返回值:出错-1,;其它数值表示实际写入的字节数

5.读文件read函数:

• ssize_t read(int fd,void *buf,size_t len);

– 参数fd:使用open 函数打开文件之后返回的句柄

– 参数*buf:读出的数据保存的位置

– 参数len:每次最多读len 个字节

– 返回值:错误返回-1,执行成功返回实际读取值

二、代码编写

对文件的操作一般必需要用到以下几步:

1、对文件的IO操作需要的头文件基本是一样的,都需要用到以下几个头文件。实际编程中我们可以从终端里通过man命令查找然后复制过来直接用。例如,在Ubuntu终端里输入man 2 read 后就可以查到关于read的用户手册,其中对read的详细介绍就包括头文件等等。其他函数用相同的方法都可查询到。

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include <string.h>

2、在主函数里面定义一个整形的变量,来保存open返回的句柄值;

3、定义字符串,保存文件路径;

4、为后面要用到的读写函数创建缓冲区数组,或ssize_t变量

5、采用一个if语句判断打开文件是否正确,正确返回句柄值,不正确打印提示信息;

6、文件打开正确后,调用相应的读写函数,传入正确参数进行相应的读写操作。

7、文件进行读写完操作后一定要通过close函数关闭,否则文件一直被占用就会影响其他程序的运行。

三、运行结果

1、open运行结果

/

2、creat运行结果

3、read运行结果

4、write运行结果

用vi打开/bin下的testwrite文件可以看到如下图所示

Linux系统编程--文件IO操作的更多相关文章

  1. linux系统编程--文件IO

    系统调用 什么是系统调用: 由操作系统实现并提供给外部应用程序的编程接口.(Application Programming Interface,API).是应用程序同系统之间数据交互的桥梁. C标准函 ...

  2. Linux学习记录--文件IO操作相关系统编程

    文件IO操作相关系统编程 这里主要说两套IO操作接口,各自是: POSIX标准 read|write接口.函数定义在#include<unistd.h> ISO C标准 fread|fwr ...

  3. Linux系统编程@文件操作(一)

    只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...

  4. Linux系统编程@终端IO

    Linux系统中终端设备种类  终端是一种字符型设备,有多种类型,通常使用tty 来简称各种类型的终端设备.终端特殊设备文件一般有以下几种: 串行端口终端(/dev/ttySn ) ,伪终端(/dev ...

  5. 系统编程--文件IO

    1.文件描述符 文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时候,内核向进程返回一个文件描述符,新打开文件返回文件描述符表中未使用的最小文件描述符.Unix系统shell使用文件描述符 ...

  6. linux系统编程:IO读写过程的原子性操作实验

    所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...

  7. Linux系统编程--文件描述符的复制dup()和dup2()【转】

    本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个 ...

  8. linux系统相关文件和操作

    查看内核: uname -r [root@server0 ~]# uname -r -.el7.x86_64 [root@server0 ~]# 查看版本: cat  /etc/redhat-rele ...

  9. Linux系统编程—信号集操作函数

    先来回顾一下未决信号集是怎么回事. 信号从产生到抵达目的地,叫作信号递达.而信号从产生到递达的中间状态,叫作信号的未决状态.产生未决状态的原因有可能是信号受到阻塞了,也就是信号屏蔽字(或称阻塞信号集, ...

随机推荐

  1. 转:JavaScript中的this陷阱的最全收集

    在其他地方看到的,觉得解释的狠详细,特此分享 当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概念,可能真解释不清 ...

  2. windows下cmd时复制dos中的内容 错误信息等

    16:28 2015/11/23小发现 windows下cmd时复制dos中的内容,错误信息等:鼠标右键选择标记,然后ctrl c 即可.

  3. nodeJS中exports和mopdule.exports的区别

    每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {} module.exports = {}; Node.js为了方 ...

  4. BZOJ4176: Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  5. BZOJ4154: [Ipsc2015]Generating Synergy

    Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色   Input 第一行一个数T,表示数据组数 接下来每组数据的第一 ...

  6. 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener

    严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis ...

  7. Bouncy Castle内存溢出

    现象: 堆内存溢出,java.lang.OutOfMemoryError: Java heap space 用jmap查看,显示 num     #instances         #bytes   ...

  8. CSS3是怎么实现全景特效?

    很有意思的全景动画:(直接上代码) html部分: <div class="panorama"></div> css部分: .panorama{ width ...

  9. JAVA集合迭代遍历和特性介绍

    数组.集合:都是一种容器,用一个对象管理多个对象:数组不能自动增长:只能存放同类型的元素 集合能自动扩容:部分集合允许存放不同类型的元素: 1.List: 有顺序的,允许存放重复的元素: 遍历:for ...

  10. TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement.

    我今天写程序的时候遇到的问题,开始完成功能后没发觉.当再次部署程序更新时候,出的错误,通过firebug发现提示是TypeError: 'stepUp' called on an object tha ...