Linux C——文件IO

概念

在posix(可移植操作系统接口)中定义的一组输入输出的函数

特点

1.没有缓冲机制,每次操作都会经过系统调用,效率较低
2.围绕文件描述符来操作,0(标准输入)、1(标准输出)、2(标准错误)、......
3.默认打开0、1、2
4.除目录外其他任意类型文件都可以操作

函数

打开文件

open

定义:
    int open(const char *pathname, int flags);
功能:
    打开文件
参数:
    pathname:文件路径名
    flags:打开文件的方式
        O_RDONLY:只读
        O_WRONLY:只写
        O_RDWR:可读可写
        O_CREAT:创建
        O_TRUNC:清空
        O_APPEND:追加
返回值:
    成功:文件描述符
    失败:-1

当打开方式为O_CREAT时,open函数需要传入第三个参数:文件的权限值,这里的权限值为八进制数,通过运算:传入的值 & (~umask),可以得出实际的权限值,umask为文件权限掩码,值为0002。

关闭文件

close
调用时直接传入文件操作符即可。

读写文件

read

定义:
    ssize_t read(int fd, void *buf, size_t count);
功能:
    从一个已打开的可读文件中读取数据
参数:
    fd  文件描述符
    buf  存放位置
    count  期望的个数
返回值:
    成功:实际读到的个数
    返回-1:表示出错,并设置errno号
    返回0:表示读到文件结尾

write

定义:
    ssize_t write(int fd, const void *buf, size_t count);
功能:
    向指定文件描述符中,写入 count个字节的数据。
参数:
    fd:文件描述符
    buf:要写的内容
    count:期望值
返回值:
    成功:实际写入数据的个数
    失败  : -1

文件定位操作

lseek

定义:
    off_t lseek(int fd, off_t offset, int whence);
功能:
    设定文件的偏移位置
参数:
    fd:文件描述符
    offset:偏移量  
        正数:向文件结尾位置移动
        负数:向文件开始位置
    whence :相对位置
        SEEK_SET:开始位置
        SEEK_CUR:当前位置
        SEEK_END:结尾位置
返回值:
    成功:文件的当前位置

文件属性获取

stat

定义:
    int stat(const char *path, struct stat *buf);
功能:
    获取文件属性
参数:
    path:文件路径名
    buf:保存文件属性信息的结构体
返回值:
    成功:0
    失败:-1
struct stat 
{
    dev_t    st_dev;      /* 设备ID */
    ino_t     st_ino;     /* inode号 */
    mode_t    st_mode;    /* 文件类型和权限 */
    nlink_t   st_nlink;   /* 硬链接数 */
    uid_t     st_uid;     /* 用户ID */
    gid_t     st_gid;     /* 组ID */
    off_t     st_size;    /* 大小 */
    time_t    st_atime;   /* 最后访问时间 */
    time_t    st_mtime;   /* 最后修改时间 */
    time_t    st_ctime;   /* 最后状态改变时间 */
};

目录操作

目录操作围绕目录流DIR *。

opendir

定义:
    DIR *opendir(const char *name);
功能:
    获得目录流
参数:
    要打开的目录
返回值:
    成功:目录流
    失败:NULL

readdir

定义:
    struct dirent *readdir(DIR *dirp);
功能:
    读目录
参数:
    要读的目录流
返回值:
    成功:读到的信息    
    失败或读到目录结尾:NULL
返回值为结构体,该结构体成员为描述该目录下的文件信息
struct dirent 
{
    ino_t   d_ino;               /* 索引节点号*/
    off_t   d_off;               /*在目录文件中的偏移*/
    unsigned short d_reclen;     /* 文件名长度*/
    unsigned char  d_type;       /* 文件类型 */
    char    d_name[256];         /* 文件名 */
};

closedir

定义:
    int closedir(DIR *dirp);
功能: 
    关闭目录
参数:
    dirp:目录流
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇