Linux系统编程--文件IO操作
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操作的更多相关文章
- linux系统编程--文件IO
系统调用 什么是系统调用: 由操作系统实现并提供给外部应用程序的编程接口.(Application Programming Interface,API).是应用程序同系统之间数据交互的桥梁. C标准函 ...
- Linux学习记录--文件IO操作相关系统编程
文件IO操作相关系统编程 这里主要说两套IO操作接口,各自是: POSIX标准 read|write接口.函数定义在#include<unistd.h> ISO C标准 fread|fwr ...
- Linux系统编程@文件操作(一)
只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...
- Linux系统编程@终端IO
Linux系统中终端设备种类 终端是一种字符型设备,有多种类型,通常使用tty 来简称各种类型的终端设备.终端特殊设备文件一般有以下几种: 串行端口终端(/dev/ttySn ) ,伪终端(/dev ...
- 系统编程--文件IO
1.文件描述符 文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时候,内核向进程返回一个文件描述符,新打开文件返回文件描述符表中未使用的最小文件描述符.Unix系统shell使用文件描述符 ...
- linux系统编程:IO读写过程的原子性操作实验
所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...
- Linux系统编程--文件描述符的复制dup()和dup2()【转】
本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个 ...
- linux系统相关文件和操作
查看内核: uname -r [root@server0 ~]# uname -r -.el7.x86_64 [root@server0 ~]# 查看版本: cat /etc/redhat-rele ...
- Linux系统编程—信号集操作函数
先来回顾一下未决信号集是怎么回事. 信号从产生到抵达目的地,叫作信号递达.而信号从产生到递达的中间状态,叫作信号的未决状态.产生未决状态的原因有可能是信号受到阻塞了,也就是信号屏蔽字(或称阻塞信号集, ...
随机推荐
- ACM 16进制的简单运算
16进制的简单运算 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整 ...
- IOS关于UIViewController之间的切换
IOS关于UIViewController之间的切换 1.NavigationController切换UIViewController的两种方式 方法一右侧进入 1 SecondViewControl ...
- linux 远程桌面的配置
root根用户登录在/root目录下#rpm -q vnc vnc-server查询已安装vnc的客户端和服务器端vnc-4.1.1-36vnc-server-4.1.1-36 #vi /etc/sy ...
- git两种合并方法 比较merge和rebase
18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ...
- 【Oracle】悲观锁和乐观锁
悲观锁 如select * for update 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性.但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样 ...
- iOS 开发小结
一,经历 1> 在编写以前有过的类似的新功能时,如果以前的开发人员没有写明明确的注释和开发需求,一定要仔细阅读所有代码,每一句代码都有它存在的意义. 2> 例如,只以为是[self.ful ...
- js从身份证号中获取出生日期和性别
今天,在做移动端的项目中,按照设计稿的要求,是可以让用户自己输入出生日期的,我还很认真的用了刚刚知道的html5表单的日期类型,本想着终于不用日期插件就可以实现用户选择自己的出生日期了,可结果老大说, ...
- [转载]How To Add Swap on Ubuntu 12.04
How To Add Swap on Ubuntu 12.04 Aug 17, 2012 Linux Basics Ubuntu About Linux Swapping Linux RAM i ...
- Daily Scrum 10.27
今天是星期天,但大家都没有放松,还是抽出了一定的时间来完成任务.可以感觉出来在编译作业的压力下大家的热情不是很高涨,希望大家坚持下去. 下面是今天的Task统计: 下面是所有迭代的状态:
- CSS DIV 独占一行,清除左右两边的浮动
clear:both //表示清除左右两边浮动的层,自己独占一行