系统io——初级

1、Linux系统编程
    文件
    进程
    线程
    网络编程
    
    Linux中一切皆文件,文件操作是最基础最通用的操作
    在Linux中,一共有7种文件:
        普通文件    -
        目录        d
        链接        l
        管道        p
        套接字        s
        字符设备    c
        块设备        b

        
2、系统调用 
    所谓系统调用就是内核提供给应用程序的一组特殊的接口
    用户通过这组接口才能使用内核所提供的服务 。
    
    库函数,一般是指标准C库所提供的函数接口,标准C库中的这些函数间接的使用系统调用接口。
    
3、系统IO
    指操作系统提供的对文件的通用操作
    主要包括以下接口
        open    打开文件
        read    读文件
        write    写文件
        close    关闭文件
        lseek    文件定位
        mmap    内存映射

        
4、函数接口说明
    #include <fcntl.h>
    int open(const char *pathname, int flags);
    int open(const char *pathname, int flags, mode_t mode);

    功能:用于打开 或 创建 文件
    参数:
        pathname 待打开的文件名,建议带路径,如 "./1.c"   "/hom/china/2.txt"
        flags    打开标志,以下三个标志,必选其一
                O_RDONLY    只读
                O_WRONLY    只写
                O_RDWR        可读可写
                可选标志有很多,常用如下:
                O_APPEND    追加写,即原有数据保留,在最后追加新数据
                O_CREAT        创建,如果需要创建新文件,必须要有该标志    
                O_TRUNC        截断(短),即清空原有数据,然后再写新数据
            例:如果某个文件不存在,则创建,如果存在则清空,再写数据,则标志写法如下:
                O_WRONLY | O_CREAT | O_TRUNC
            例:只需要读文件的内容,则标志如下:
                O_RDONLY
        
        mode    创建新文件的权限,只有当打开标志中有O_CREAT时,才需要该参数
                在程序中,常用8进制表示文件权限
                例如:文件权限为 文件所有者可读可写,组用户和其它用户只能读,则权限表示为:
                    0644
                    
    返回:
        成功返回一个非负的整数,称这个整数为文件描述符
            后续对文件的所有操作都依赖于这个 文件描述符
        失败返回-1,同时设置errno
        
    注:
        errno是一个系统级别的全局变量,用来表示库函数和系统调用出错了
        当函数调用失败时,可以使用以下函数来获取错误信息
            perror: 把错误信息以字符串的形式打印出来
            strerror:把错误信息以字符串的形式返回

        当程序执行时,系统会自动打开三个文件,分别称为 标准输入,标准输出,标准错误
        在系统定义了三个宏来表示这三个文件
            STDIN_FILENO        0
            STDOUT_FILENO        1
            STDERR_FILENO        2

        当指定权限创建文件时,文件最终的权限是由mode和umask的值一起决定的,
        一般情况下,umask的值为0002, 即移除了其它用户的写权限。
            
            
--------------------------------------------
    #include <unistd.h>
    int close(int fd);

    功能: 关闭打开的文件
    参数: fd 文件描述符
    返回:
        成功返回0,失败返回-1,同时设置errno
    
----------------------------------------------
    #include <unistd.h>
    ssize_t read(int fd, void *buf, size_t count);

    功能:用于读文件
    参数:
        fd  文件描述符,代表要读的那个文件
        buf 缓冲区首地址,用于保存从文件中读到的数据,常见如变量的地址,数组名字,malloc的返回值
        count 期望从文件中读取的字节数

    返回:
        成功返回实际读取到的字节数,对于普通文件来说,如果返回0,表示文件读完了
        失败返回-1,同时设置errno


    ssize_t write(int fd, const void *buf, size_t count);
    功能:用于把数据写入文件
    参数:
        fd  文件描述符,代表要写的那个文件
        buf 缓冲区首地址,表示待写入的数据的首地址
        count 期望写入文件的字节数

    返回:
        成功返回实际写入的字节数
        失败返回-1,同时设置errno

       -----------------------------------------------------------------------
    off_t lseek(int fd, off_t offset, int whence);
    功能:用于设置文件的读写位置
    参数:
        fd 文件描述符
        offset 偏移量,正数表示往右偏移,负数表示往左偏移
        whence 设置偏移量时的参考位置,系统提供三种参考位置:
            SEEK_SET    表示文件开始位置
            SEEK_CUR    表示文件当前位置
            SEEK_END     表示文件末尾位置

    返回:
        成功返回当前位置到文件开始位置的字节数
        失败返回-1,同时设置errno
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

int main

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值