Linux软件编程(Day3)
创始人
2024-09-25 14:24:24
0

利用fread和fwrite实现文件的拷贝
      char tmpbuff[4096];
      图片的拷贝

2.标准IO
    1.打开文件   fopen
    2.读写文件   fgetc fputc 
                fgets fputs 
                fscanf fprintf 
                fread fwrite 
    3.关闭文件   fclose

3.流的定位:
    偏移量:读和写都在偏移量的位置进行
    int fseek(FILE *stream, long offset, int whence);
    功能:
        设置流的偏移量
    参数:
        stream:文件流指针
        offset:偏移量 
        whence:
            SEEK_SET        文件开头
            SEEK_CUR        当前位置
            SEEK_END        文件结尾
    返回值:
        成功返回当前偏移量
        失败返回-1 

    long ftell(FILE *stream);
    功能:
        获取流的偏移量 
    
    void rewind(FILE *stream);
    功能:
        将流的偏移量重新设置到开头

    fseek(fp, 0, SEEK_SET);


练习:
编写程序随便给定一个bmp图片文件名获得图片的宽度和高度
 

文件IO:
1.打开文件  open
2.读写文件  read write 
3.关闭文件  close 

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_TRUNC         文件存在清0 
            O_APPEND        追加 
            O_EXCL          文件存在报错 
            O_NONBLOCK      非阻塞 
            O_ASYNC         异步IO 
            ..
        mode:权限
            只要有O_CREAT标识,表示需要加上权限:
            rwx rwx rwx 
            rw- rw- r-- 
            110 110 100
        0   6   6   4
    返回值:
        成功返回文件描述符
        失败返回-1  

练习:
写出标准IO中"r"、"r+"、"w"、"w+"、"a"、"a+"对应的文件IO的打开形式
    "r"         O_RONLY 
    "r+"        O_RDWR 
    "w"         O_WRONLY | O_CREAT | O_TRUNC, 0664 
    "w+"        O_RDWR | O_CREAT | O_TRUNC, 0664
    "a"         O_WRONLY | O_CREAT | O_APPEND, 0664 
    "a+"        O_RDWR | O_CREAT | O_APPEND, 0664

0   STDIN_FILENO    -> stdin 
1   STDOUT_FILENO   -> stdout 
2   STDERR_FILENO   -> stderr 

2.close 
   int close(int fd);
   功能:
     关闭文件描述符
     成功返回0 
     失败返回-1  

3.write
   ssize_t write(int fd, const void *buf, size_t count);
   功能:
    向文件描述符中写入buf开始的count个字节 
   参数:
    fd:文件描述符 
    buf:写入的数据首地址 
    count:写入的字节数 
   返回值:
    成功返回写入的字节数 
    失败返回-1

4.read 
   ssize_t read(int fd, void *buf, size_t count);
   功能:
    从文件描述符中读取数据到buf开始的空间中,最多读取count个字节 
   参数:
    fd:文件描述符 
    buf:存放数据空间首地址 
    count:最多读取的字节数 
   返回值: 
    成功返回读取的字节数
    读到文件末尾返回0  
    失败返回-1

5.lseek 
   off_t lseek(int fd, off_t offset, int whence);
   功能:
        修改文件描述符对应的偏移量
   参数:
        fd:文件描述符 
        offset:偏移量 
        whence:
            SEEK_SET:从文件开头开始偏移
            SEEK_CUR:从当前位置开始偏移
            SEEK_END:从文件末尾开始偏移
   返回值: 
        成功返回当前的偏移量
        失败返回-1

6.标准IO和文件的区别:
    fopen                 ->          open
    
    fgetc/fputc           ->          read/write  
    fgets/fputs
    fscanf/fprintf
    fread/fwrite

    fclose                ->          close 

    fseek                 ->          lseek 
    rewind 
    ftell 

  1.标准IO是库函数
    2.文件IO是系统调用 
    3.标准IO是针对于文件IO的封装
    4.标准IO是有缓存的
    5.文件IO是没有缓存的
    6.标准IO主要用于操作普通文件
    7.文件IO可以操作设备文件、进程间通信的文件、普通文件(Linux系统下的一切文件均可以使用文件IO)

    库函数:是针对于系统调用的封装,可以在Windows或者Linux系统中使用
    系统调用:是Linux内核中的函数接口,只能在Linux系统中使用 
 

7.其余函数接口:
    1.fileno
       标准IO  ->  文件IO  
       int fileno(FILE *stream);
       功能:
         获得文件流指针对应的文件描述符  

    2.fdopen
       文件IO -> 标准IO 
       FILE *fdopen(int fd, const char *mode);
       功能: 
         通过文件描述符获得文件流指针
    
    3.feof 
      检测是否读到文件末尾 

    4.ferror 
      检测是否出错 

    5.clearerr 
      清除错误 

1.Linux系统中时间的获取:
    1.time
      time_t time(time_t *tloc);
      功能:
        返回1970年1月1日到现在的秒数
      参数:
        tloc:存放秒数空间的首地址
      返回值: 
        成功返回1970年1月1日到现在的秒数
        失败返回-1

 2.localtime 
      struct tm *localtime(const time_t *timep);
      功能:
        将秒数转换为本地时间
      参数:
        timep:存放秒数空间的首地址
      返回值: 
        成功返回本地时间
        失败返回NULL
        
        struct tm {
            int tm_sec;    /* Seconds (0-60) */
            int tm_min;    /* Minutes (0-59) */
            int tm_hour;   /* Hours (0-23) */
            int tm_mday;   /* Day of the month (1-31) */
            int tm_mon;    /* Month (0-11) */
            int tm_year;   /* Year - 1900 */
            int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
            int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
            int tm_isdst;  /* Daylight saving time */
        };

   3.mktime 
      time_t mktime(struct tm *tm);
      功能:    
        根据日历时间转换为1970年1月1日到现在的秒数  

相关内容

热门资讯

教程攻略!微扑克专用辅助程序(... 教程攻略!微扑克专用辅助程序(有辅助挂)兴动棋牌麻将有挂的(有挂攻略);微扑克中的10万兆豆可能无法...
1分钟透视!私人局wepoke... 1分钟透视!私人局wepoker俱乐部怎的打胜率高(透视脚本)私人局wepoker其实是有挂的(有挂...
今日百科!wpk插件数据透视(... 1、让任何用户在无需AI插件第三方神器的情况下就能够完成在wpk系统规律下的调试。2、直接的在wpk...
一分钟了解!wepoker俱乐... 一分钟了解!wepoker俱乐部如何调高胜率(透视器)wepoker原来真的有挂的(有挂途径)准备好...
重要通知!wpk俱乐部外挂(软... 重要通知!wpk俱乐部外挂(软件透明挂)越乡游十三水辅助器(有挂教学);wpk免费下载原版,在WeP...
1分钟秒懂!aa poker透... 1分钟秒懂!aa poker透视软件多少钱(作弊辅助挂)aa poker确实真实有挂的(有挂手册);...
玩家必看!wepoke外挂显示... 玩家必看!wepoke外挂显示(透明挂)赣牌圈小程序教你开挂(有挂手册)准备好在wepoke ia的...
5分钟作弊!AAPoKer德州... 1、点击下载安装,AAPoKer插件透视分类一目了然!2、免费高速下载,支持AAPoKer软件透视挂...
第三方措施!wpk德州辅助器是... 第三方措施!wpk德州辅助器是真的是假(有辅助挂)南宁老友麻将软件(有挂规律);老友麻将是一种具有地...
九分钟技巧!微扑克德州可以调胜... 1、完成微扑克德州的残局,帮助玩家取得所有比赛的胜利,直登高塔的教程。2、多达1000个不同的游戏攻...