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 以同步的方式打开文件

  1. 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。

  2. 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,表示已到达文件末尾或者无可读取数据。文件读写指针会随读取到的字节数移动。

  1. 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) 将文件读写指针移动到当前位置

原创粉丝点击