Linux系统C语言读写文件总结 (一)

1. 概述

一般来说,linux系统中对文件的读写操作只需要几个基本函数就可以搞定,包括open, read, write, lseek以及close等函数。这里所说的函数就是所谓的不带缓冲的I/O。这里不带缓冲指的是这些个函数(read, write等)都对应与系统内核的一个系统调用。它们也不是ISO C的组成部分,但是,它们是POSIX.1和Single UNIX Specification的组成部分。


2. open函数

    #include<fcntl.h>
    int  open(const char* pathname, int oflag, .../* mode_t mode */);

注:第三个参数仅当创建新文件时才会使用到。

oflag选项:

O_RDONLY 只读打开

O_WRONLY 只写打开

O_RDWR 读写打开

O_APPEND 追加到文件尾

O_CREAT 若文件不存在则创建之

O_TRUNC 如果此文件存在,而且为只写或者读写打开,则将其长度截短为0

O_EXCL 如果同时指定了O_CREAT,而文件已经存在则会出错。用此可以判断一个文件是否已经存在,如果不存在则创建此文件,这使得测试和创建二者成为一个原子操作。

O_NONBLOCK 如果是一个FIFO,块文件,字符文件则将I/O操作设置为非阻塞模式的

......还有很多,但目前看来用不到。

open函数返回打开文件的描述符。其中有几个特殊的文件描述符,已经被系统占用,包括:标准输入文件(STDIN_FILENO = 0),标准输出文件(STDOUT_FILENO = 1)以及标准出错输出文件(STDERR_FILENO = 2)。这些都定义在头文件<unistd.h>中。


3. creat函数

    #include<fcntl.h>
    int creat(const char *pathname, mode_t mode);
注:此函数等效于调用open函数:

open(pathname, O_WRONLY|O_CREAT|O_TRUNC, mode);


4. close函数

    #include<unistd.h>
    int close(int filedes);

关闭文件,同时还会释放该进程加在该文件上的所有记录锁。


5. lseek函数

    #include<unistd.h>
    off_t lseek(int filedes, off_t offset, int whence);

打开一个文件时,偏移一般都是0。但是如果指定了O_APPEND选项则偏移不一定是0了。另外我们也可以调用lseek函数来调节打开文件的偏移量。

注:whence有以下三种可能,

SEEK_SET 偏移量指定为距文件开始处offset个字节

SEEK_CUR 偏移量指定为当前值加offset,offset可为正或负

SEEK_END 偏移量指定为文件长度加offset,offset可为正或负

如果文件描述符引用的是一个管道,FIFO或者网络套接字,则lseek返回-1,并将errno设置为ESPIPE。


6. open函数

    #include<unistd.h>
    ssize_t read(int filedes, void *buf, size_t nbytes);
如read成功,则返回读到的字节数。如已到达字节末尾,则返回0。如果出错则返回-1.


7. write函数

    #include<unistd.h>
    ssize_t write(int filedes, const void *buf, size_t nbytes);
写成功则返回已写的字节数,若出错则返回-1


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值