Linux 操作系统&非缓冲区的文件操作、时间编程

目录

1、文件操作

1.1 基于缓冲区的文件操作

1.2 基于非缓冲区的文件操作

1.2.1  open打开

1.2.2  关闭文件

1.2.3  写

1.2.4  读--read

1.2.5-光标偏移函数--lseek

2、 时间编程

2.1、 和时间相关的指令:

2.2、 和时间编程相关的 API

2.2.1  获取日历时间 

2.2.2  获取本地时间 

2.2.3  获取格林威治 

2.2.4 获取时间的字符串 

2.2.5  获取时间的字符串 

2.2.6 关于时间的字符串


1、文件操作

1.1 基于缓冲区的文件操作

基于缓冲区的文件操作---高级Io

以f开头的是基于缓冲区的文件操作

printf是一个基于缓冲区的函数

输出条件:
        1.程序正常运行

        2.遇到换行\n也能输出

        3.缓存区内存已满  1024大小

        4.遇到fflush(stdout)

1.打开文件 FILE *fopen();

2.读写        形参        fwrite

3.关闭 fclose

1.2 基于非缓冲区的文件操作

基于非缓冲区的文件操作--低级IO

        1.打开文件  open

        2.读写        write read

        close

        lseek        控制光标位置

1.2.1  open打开

头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


函数原型:

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 -- 清空
        O_APPEND -- 追加
        O_EXCL: 要求和 O_CREAT 连用, 文件如果不存在, 创建并打开, 如果文件存在, open 直接返回失败( -1)

        由flags决定,如果flags里面有O_CREAT,此时需要提供mode。否则,不用提供

        mode文件的权限:八进制数

最终文件的权限:你提供的mode  &  (~umask)

举例: 0777 真正的权限: 111 111 111 & (111 111 101)
返回值: 成功 int 类型的文件描述符
失败返回-1;
举例:
        打开 1.txt,读写的方式打开, 文件不存在, 创建, 文件存在, 清空写
        open(“1.txt”,O_RDWR|O_CREAT|O_TRUNC,);

1.2.2  关闭文件

头文件:

#include <unistd.h>


函数原型:

int close(int fd);


形参: open 的返回值
返回值: close() returns zero on success. On error, -1 is returned

1.2.3  写

头文件:

#include <unistd.h>

函数原型:

ssize_t write(int fd, const void*buf, size_t count);

形参:

        fd : open的返回值

        buf:要写入的内容的首地址 

        count:写入的字节数

返回值:成功返回真正写入的字节数,失败返回-1;

1.2.4  读--read

头文件:

#include<unistd.h>

函数原型:

ssize_t read(int fd, void *buf, size_t count);

形参:fd : open 的返回值

        buf:读取到的内容存放的位置,提供空间即可

        count:要读取的字节数

返回值:成功返回真正读取到的字节数

失败返回-1

1.2.5-光标偏移函数--lseek

头文件:

#include <sys/types.h>
#include <unistd.h>

函数原型:

off_t lseek(int fd, off_t offset,int whence);

形参:
        fd: open 的返回值
        offset: 偏移量 +n 往文件末尾方向偏移 n 字节
        -n 往文件开头方向偏移 n 字节
        whence: 偏移时的参考位置
        SEEK_SET 文件开头
        SEEK_CUR 文件当前位置
        SEEK_END 文件末尾
        返回值: 执行操作之后, 光标位置距离文件开头的偏移量
        求文件大小:
        off_t size = fseek(fd,0,SEEK_END);


2、 时间编程


2.1、 和时间相关的指令:


1-> date

2>cal


2.2、 和时间编程相关的 API


2.2.1  获取日历时间 


日历时间: 1970 年 1 月 1 日 0 点 0 分 0 秒举例现在的秒数

#include <time.h>
time_t time(time_t *tloc);


使用:
        方式 1: time_t t = 0;
                time(&t); t 里面就存放当前的日历时间
        方式 2: timt_t t = time(NULL);
                time 的返回值就是日历时间;


2.2.2  获取本地时间 

#include <time.h>
struct tm *localtime(const time_t *timep);


形参: timep -- 日历时间, 传地址
返回值:

struct tm {
        int tm_sec; /* 秒 */
        int tm_min; /* 分 */
        int tm_hour; /* 时 */
        int tm_mday; /* Day of the month (1-31) */
        int tm_mon; /* Month (0-11)+1 */
        int tm_year; /* Year - 1900 +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 */
};


2.2.3  获取格林威治 

struct tm *gmtime(const time_t *timep);


形参和返回值和 localtime 一样, 结果中的时间是美国时间


2.2.4 获取时间的字符串 

char *ctime(const time_t *timep);


形参: timep -- 日历时间, 传地址
返回值: 关于时间的字符串


2.2.5  获取时间的字符串 

char *asctime(const struct tm *tm);


形参: localtime 或者 gmtime 的返回值
返回值:
        关于时间的字符串
        如果传参传的是 localtime 的返回值, 关于时间的字符串是准确的
        如果传参传的是 gmtime 的返回值, 关于时间的字符串差 8hour


2.2.6 关于时间的字符串


        功能: 我们可以根据 format 指向字符串中格式命令把 timeptr 中保存的时间信息放在 strDest 指向的字符串中, 最多向 strDest 中存放 maxsize 个字符。 该函数返回向 strDest 指向的字符串中放置的字符数。函数 strftime()的操作有些类似于 sprintf(): 识别以百分号(%)开始的格式命令集合, 格式化输出结果放在一个字符串中。 格式化命令说明串 strDest 中各种日期和时间信息的确切表示方法。 格式串中的其他字符原样放进串中。 格式命令列在下面, 它们是区分大小写的。
函数原型:

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);


形参:
        s:存放格式化时间字符串
        max: 时间字符串最大长度
        format: 自定义格式 按照此格式, 放在第一个参数给的字符串中
        tm: 时间描述的结构体(gmtime / localtime 返回值)
        如果是 gmtime 得到的结构体指针, 时间差 8 小时
        如果是 localtime 得到的结构体指针, 时间准确
        %a 星期几的简写
        %A 星期几的全称
        %b 月分的简写
        %B 月份的全称
        %c 标准的日期的时间串
        %C 年份的后两位数字
        %d 十进制表示的每月的第几天
        %D 月/天/年
        %e 在两字符域中, 十进制表示的每月的第几天
        %F 年-月-日
        %g 年份的后两位数字, 使用基于周的年
        %G 年分, 使用基于周的年
        %h 简写的月份名
        %H 24 小时制的小时
        %I 12 小时制的小时
        %j 十进制表示的每年的第几天

        %m 十进制表示的月份
        %M 十时制表示的分钟数
        %n 新行符
        %p 本地的 AM 或 PM 的等价显示
        %r 12 小时的时间
        %R 显示小时和分钟: hh:mm
        %S 十进制的秒数
        char buf[128] = {0}
        strftime(buf,sizeof(buf),”%D %S %R”,loctm);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值