Linux 文件的输入输出
来源:互联网 发布:刷机可以解除网络锁吗 编辑:程序博客网 时间:2024/06/14 07:47
文件描述符是一个非负整数,在读写一个文件前,先调用open或者creat函数打开文件,成功返回文件描述符。文件描述符的范围在0~NR_OPEN之间,Linux中的NR_OPEN为255,说明每个程序最多只能打开256个文件。文件描述符0代表标准输入文件,1代表标准输出文件,2代表标准错误输出。
一、 文件的创建与打开
1. open函数
函数原型:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname是要打开或创建的含路径的文件名,flags是打开文件的方式。
O_RDONLY 只读方式打开 O_WRONLY 只写方式打开
O_RDWR 可读可写方式打开
O_CREAT 若文件不存在就自动创建该文件
O_EXCL 如果O_CREAT被设置,这个指令会去检查文件是否存在,不存在则会创建该文件,存在则会导致打开文件出错。
O_TRUNC 若文件存在并以可写的方式打开,这个命令会将文件长度清0
O_APPEND 将所写内容以追加的方式加入到文件后面
O_SYNC 以同步的方式打开文件
creat函数
函数原型:
int create(const char *pathname, mode_t mode)
pathname是要打开或创建的含路径的文件名,如果pathname指向的文件不存在,就会创建一个新文件,若原文件存在,则原文件会被覆盖,mode与open函数相同,create( )相当于这样使用open():
open(const char*pathname, (O_CREAT|O_WRONLY|O_TRUNC));
成功会返回一个文件描述符,错误会返回-1,将错误代码给errno。close函数
函数原型:
int close(fd);
该函数只有一个参数,fd表示要关闭文件的文件描述符,该描述符是由open 或者creat函数得到的。调用成功返回值为0,错误返回-1。close函数成功并不能保证数据全部写回硬盘。
最好在程序中显示的调用close函数。
2 #include<stdio.h> 3 #include<sys/types.h> 4 #include<sys/stat.h> 5 #include<fcntl.h> 6 #include<unistd.h> 7 #include<errno.h> 8 9 //用open或creat系统调用来创建一个新文件 10 int main() 11 { 12 int fd; 13 if((fd = open("example_62.c",O_CREAT|O_EXCL,S_IRUSR|S_IWUSR)) == -1) 14 { 15 perror("open"); 16 exit(1); 17 } 18 else 19 { 20 printf("create file success\n"); 21 } 22 close(fd); 23 return 0; 24 }-- 可视 -- 24,2 底端
二、 文件的读写
1. read函数
函数原型:
size_t read(int fd, void *buf, size_t count)
函数中各参数的意义:从文件描述符fd所指向的文件中读取count个字节的数据到buff所指向的缓存中,若count为0,read()函数不会读取数据,只返回0,返回值表示实际读取的字节数,返回0,表示已到达文件末尾或者无可读取数据。文件读写指针会随读取到的字节数移动。
- write函数
函数原型:
size_t write(int fd, const char *buf, size_t count);
将buf缓存中的count个字节数据写入到fd所指向的文件中文件读写指针会随着移动,成功write函数会返回写入的字节数,有错误发生返回-1,将错误代码存入errno 中。
三、 文件读写指针的移动
lseek用来移动文件读写指针的位置
size_t lseek(int fildes, off_t, offset, int whence);
参数fildes为已打开文件的文件描述符,参数offset为根据参数whence来移动读写位置的位移数。whence有以下三种取值:
SEEK_SET 从文件开始处计算偏移量,文件指针到文件开始的距离为offset
SEEK_CUR 从文件指针的当前位置计算偏移量,文件指针值等于当前指针值加上offset的值,offset允许取负值
SEEK_END 从文件结尾处计算偏移量, 文件指针值等于当前指针值加上offset值, offset允许取负值
调用成功返回当前的读写位置,也就是距离文件开始处有多少个字节,错误返回-1。
lseek的几种用法:
lseek(int fildes, 0, SEEK_SET) 将文件读写指针移动到文件开头
lseek(int fildes, 0, SEEK_END) 将文件读写指针移动到文件末尾
lseek(int fildes, 0, SEEK_CUR) 将文件读写指针移动到当前位置
- linux文件的输入输出
- Linux 文件的输入输出
- LINUX输入输出与文件
- linux文件输入输出
- linux文件输入输出
- 文件的输入输出函数
- 输入输出文件的缓冲区
- 文件的输入输出函数
- 文件输入输出的模式
- c++文件的输入输出
- 文件的输入输出函数
- Java的文件输入输出
- 文件的输入输出
- acm文件的输入输出
- 文件输入输出的例子
- 【c++】文件的输入输出
- 文件的输入输出 C++
- 文件的输入输出 part1
- 《美团网编程题》奇数位丢弃
- hdu 6078 Kanade's sum 计数dp
- 区块链从概念到落地,多样化应用激活大数据经济
- C程序设计语言(一)导言,类型、运算符与表达式
- 端口未被占用,却无法启动adb的奇葩问题
- Linux 文件的输入输出
- 理性看待区块链:架构混搭才最优
- 度度熊与邪恶大魔王——dp
- 区块链、比特币、旧业态:冲击、颠覆,合作、创新
- svn检出项目目录不对处理以及为项目设置svn地址
- 重载和覆盖
- POJ1013算法解析
- 区块链颠覆金融行业底层架构 开启价值互联新时代
- 基础篇五---服务的基本知识及www服务介绍