【Linux系统编程】文件IO操作

文件描述符
在 Linux 的世界里,一切设备皆文件。我们可以系统调用中 I/O 的函数(I:input,输入;O:output,输出),对文件进行相应的操作(?open()、close()、write() 、read() 等)。

打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已打开的文件。这个文件描述符相当于这个已打开文件的标号,文件描述符是非负整数,是文件的标识,操作这个文件描述符相当于操作这个描述符所指定的文件。

程序运行起来后(每个进程)都有一张文件描述符的表,标准输入、标准输出、标准错误输出设备文件被打开,对应的文件描述符 0、1、2 记录在表中。程序运行起来后这三个文件描述符是默认打开的。

#define STDIN_FILENO ?0?//标准输入的文件描述符

#define STDOUT_FILENO 1?//标准输出的文件描述符

#define STDERR_FILENO 2?//标准错误的文件描述符

在程序运行起来后打开其他文件时,系统会返回文件描述符表中最小可用的文件描述符,并将此文件描述符记录在表中。Linux 中一个进程最多只能打开 NR_OPEN_DEFAULT?(即1024)个文件,故当文件不再使用时应及时调用 close() 函数关闭文件。

常用 I/0 函数
需要的头文件:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int open(const char *pathname, int flags, mode_t mode);

功能:

打开文件,如果文件不存在则创建。

参数:

pathname:?文件的路径及文件名。

flags:?打开文件的行为标志,如,以只读方式(O_RDONLY,第一个为字母不是数据)打开,以读写或新建新文件的方式(O_RDWR|O_CREAT)打开。

mode: 这个参数,只有在文件不存在时有效,指新建文件时指定文件的权限(文件权限详情,请点此链接)。

返回值:

成功:成功返回打开的文件描述符

失败:-1

int close(int fd);

功能:

关闭已打开的文件

参数:

fd: 文件描述符,open()的返回值

返回值:

成功:0

失败:-1

ssize_t write(int fd, const void *addr,?size_t count);

功能:

把指定数目的数据写到文件(fd)

参数:

fd: 文件描述符

addr:?数据首地址

count:?写入数据的长度(字节),一般情况下,数据有多少,就往文件里写多少,不能多也不能少

返回值:

成功:实际写入数据的字节个数

失败:-1

ssize_t read(int fd, void *addr, size_t count);

功能:

把指定数目的数据读到内存(缓冲区)

参数:

fd:?文件描述符

addr: 内存首地址

count:?读取的字节个数

返回值:

成功:实际读取到的字节个数

失败:-1

原文地址:https://blog.51cto.com/14534743/2437495

时间: 2024-10-10 13:31:05

【Linux系统编程】文件IO操作的相关文章

Linux系统编程-文件IO函数

一.ioctl 函数 ioctl用于向设备发控制和配置命令,有些命令也需要读写一些数据,但这些数据是不能用read/write读写的,称为Out-of-band数据.也就是说,read/write读写的数据是in-band数据,是I/O操作的主体,而ioctl命令传送的是控制信息,其中的数据是辅助的数据.例如,在串口线上收发数据通过read/write操作,而串口的波特率.校验位.停止位通过ioctl设置,A/D转换的结果通过read读取,而A/D转换的精度和工作频率通过ioctl设置. #in

linux 系统编程 文件IO

Fileio 1.open() 系统调用 头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 原型 int open(const char * name,int flags); int open(const char * name,int flags,mode_t mode); flags O_RDONLY O_WRONLY O_RDWR O_APPEND每次写操作都写入文件的末尾 O_

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

文件IO操作相关系统编程 这里主要说两套IO操作接口,分别是: POSIX标准 read|write接口,函数定义在#include<unistd.h> ISO C标准 fread|fwrite接口,函数定义在#include<stdio.h> 有书上说POSIX标准与ISO C标准的区别在于文件读写是否带缓冲区,我则不是很认同,因此POSIX标准下的IO操作也是带缓冲区的,至于这两个标准下的IO性能谁更加好则不一定,因为这和缓冲区的大小,以及用户逻辑有很大关系. POSIX标准

Linux系统编程---文件I/O思想

1.文件如何在Linux中存储 Linux中任何事物都可以用一个文件来表示,或者通过特殊的文件提供. 一个文件由目录项.inode和数据块组成. 硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由多个扇区组成的"块",是文件存取的最小单位."块"的

Linux系统编程-文件打开关闭

一.文件描述符 对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的.当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数).后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息(file结构体). 一个进程启动时,默认打开了3个文件,标准输入.标准输出.标准错误,对应文件描述符是0(STDIN_FILENO).1(STDOUT_FILENO).2(STDERR_FILENO),这些常量定义在unistd.h头文件中. 另外介绍下面两个函数: fil

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

本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件. 这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁.对比于 d

Linux系统编程——文件描述符的复制:dup()和dup2()

dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件. 这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁.对比于 dup(), dup2() 也一样,通过原来的文件描述符复制出一个新的文件描述符,这样的话,原来的文件描述符和新的文件描述符都指向

linux下的文件IO缓冲区,及其相关操作

linux下的文件IO操作 浅谈文件IO缓冲 Read()和write()函数在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存之间复制数据. 当调用write()函数的写入3个字节的时候,由于系统调用与磁盘操作并不同步,在write()函数结束后续某个时刻,内核才会将其缓冲区中的数据写入磁盘.如果在此期间,另一个进程试图读取该文件的这几个字节,那么内核将自动从缓冲区高速缓存中提供这些数据,而不是文件中. 与此同理,对输入而言,内核从磁盘中读取数据并存储到内核缓冲

Linux系统编程之进程

前一段时间对文件I/O的基本操作基本操作做了总结,今天这里继续按照我的理解对linux系统编程的进程操作进行总结. 首先我们先理解几个概念:程序.进程.线程. 所谓程序,就是计算机指令的集合,它以文件的形式存储在磁盘上,进程是一个程序在其自身的地址空间中的一次执行活动.而线程进程内的一个执行单元,也是进程内的可调度实体.说完这个不知道大家理解了吗?反正我第一次听到这个概念以后看到的时候可以明白过后就忘记了,现在我给大家举一个例子帮助大家理解,大家都看电视剧吧,所谓程序,就是一个剧本,像什么<西游

4412开发板Linux系统编程实战-字符设备控制

在 linux 驱动中字符驱动是必须掌握的,本章主要介绍字符设备应用的程序,无论是学习了后面的知识自己写的字符驱动,还是已有的字符驱动,都需要能够写一些简单的应用程序. 即使从事 linux 驱动的工作,linux 驱动写出来之后,也需要由驱动程序员编写简单的应用进行测试的. 另外,关于驱动部分,迅为电子有专门的驱动实验教程提供给大家学习,大家有了这些基础之后再去学习底层的知识就会很容易了. 在使用手册的第八章,大家可以看到这些 c 程序也是可以在 Android 下面运行的,只不过没有图形界面