linux day3笔记

2.文件IO
    1.操作方法
        1.打开文件    open
        2.读写文件    read/write
        3.关闭文件    close
        
    2.man手册章节
        1.标准命令
        2.系统掉用
        3.库函数
        4.设备说明
        5.文件格式
        6.娱乐
        7.杂项
        8.管理员命令
        
    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_APPEND    追加
                O_ASYNC        异步IO
                O_CREAT        创建
                O_EXCL        检测文件是否存在
                O_NONBLOCK    非阻塞IO
                O_TRUNC        截断(清零)
        返回值:
            成功返回文件描述符
            失败返回-1
            
        文件描述符范围:3 - 1023
        
        0:stdin    标准输入
        1:stdout    标准输出
        2:stderr    标准出错
        
        文件描述符产生规律:
        1.范围 0 - 1023
        2.总是取尚未被占用的最小的非负整数
        
        2.close
        int close(int fd);
        功能:
            关闭文件描述符
            
        3.read
        ssize_t read(int fd, void *buf, size_t count);
        功能:
            向文件中读取数据
        参数:
            fd:文件描述符
            buf:读取数据存放的空间首地址
            count:实际读取字节数
        返回值:
            成功返回实际读取字节数
            失败 -1;
            结束 0;
        4.write
        ssize_t write(int fd, const void *buf, size_t count);
        功能:
            向文件中写入数据
        参数:
            fd:文件描述符
            buf:写入数据存放的空间首地址
            count:实际写入字节数
        返回值:
            成功返回实际写入字节数
            失败 -1;
        
        5.lseek
        
标准IO和文件IO的区别
    1.系统调用:
        Linux内核中的代码称为系统调用
        
        Shell
        1.Shell命令解释器
        2.保护内核
        
    2.库函数
        是针对操作系统内核中代码的封装
    
    3.区别
        1.标准IO是库函数,在Linux和Windows平台中均能使用
        2.文件IO是系统调用,只有在Linux内核平台中才能使用
        3.标准IO是一种有缓存的IO
        4.文件IO是没有缓存的IO
    
    4.标准IO应用场景:
        1.主要用来操作普通文件
    
    5.文件IO应用场景:
        1.主要用来操作设备文件以及除普通文件外其余类型的文件
    
    6.标准IO缓存
        标准IO中的函数接口将数据放入缓存区,满足刷新条件交给内核
        
        缓存分类:
        1.全缓存    与文件建立的缓存
            缓冲区满,刷新缓存区    
            
            刷新条件:
                1.存满4k刷新
                2.程序结束刷新(fclose刷新)
                3.fflush函数强制刷新
                
        2.行缓存    与终端建立的缓存
            遇到\n刷新
            
            刷新条件:
                1.遇到\n刷新
                2.存满1k刷新
                3.程序结束刷新(fclose刷新)
                4.fflush函数强制刷新
                
        3.不缓存    人机交互、界面控制、出错处理
            直接刷新

文件IO实现文件拷贝:

#include 
#include 
#include 
#include 
#include 

int main(int argc, const char *argv[])
{
    int srcfd = 0;
    int dstfd = 0;
    char buffer[1024] = {0};
    int nret = 0;

    if(3 != argc)
    {
        perror("Usage: ./a.out srcfilename dstfilename");
        return -1;
    }
    
    srcfd = open(argv[1], O_RDONLY);
    if(-1 == srcfd)
    {
        perror("failed to open");
        return -1;
    }

    dstfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0664);
    if(-1 == dstfd)
    {
        perror("failed to open");
        return -1;
    }
    
    while(1)
    {
        nret = read(srcfd, buffer, sizeof(buffer));
        if(nret <= 0)
        {
            break;
        }
        write(dstfd, buffer, nret);
    }

    close(srcfd);
    close(dstfd);

    return 0;
}

你可能感兴趣的:(linux,笔记,java)