首页 > 编程语言 >第24天文件操作&时间编程

第24天文件操作&时间编程

时间:2024-11-14 16:46:32浏览次数:3  
标签:24 文件 函数 int 编程 tm fd time

目录

文件操作

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

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

文件描绘符

函数:open()

函数名:close()

函数名write()

函数名:read()

函数名:lseek()

时间编程

有关时间的shell命令

时间函数(API)

函数名:time()

函数名:gmtime()

函数名:ctime()

localtime/gmtime/ctime使用的是同一个结构体保存秒数转换后的数据

函数名:asctime()

函数名:strftime()


文件操作

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

缓冲区数据清空的条件:

  1. 遇到'\n'
  2. 缓冲区满
  3. 程序停止
  4. 使用fflush()函数。

文件流指针:FILE * fp=NULL;

下面是文件操作的相关函数示例: 

fp=fopen(“1.txt”, “w+”)fwrite(“hello”,1,6,fp)fread(buf,1,6,fp)
fclose(fp)fputs(“hello”,fp)char a=fgetc(fp)
remove(“1.txt”)fputc(‘h’,fp)fseek(fp,0,0)
fprintf(fp, “hello”)fscanf(fp, “%s\n”,buf)rewind(fp)
feof()==0 不在文件末尾long a = ftell(fp)fgets(buf,6,fp)

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

文件描绘符

  • stdin          0         标准输入设备
  • stdout        1         标准输出设备
  • stderr         2         标准错误设备

函数: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);

函数功能:以flags模式打开路径为pathname的文件

函数返回值:成功,返回与文件描述符;不成功返回 -1.

函数参数:pathname:文件路径

flags:打开方式如下

O_RDONLY
O_WRONLY
O_RDWR读写
O_CREAT没有就创建,有就访问

O_EXCL

和O_CREAT连用,如果有,返回错误
O_TRUNC将文件截取为0(如果有内容就清空里面的内容)
O_APPEND追加的方式打开

mode:当第二个参数有O_CREAT时,表示创建文件的时候给定文件的权限。类似于chmod的权限设置方式(回顾Linux/shell指令的4.3.2chmod修改文件权限),采用八进制数。但此时提供的文件权限并不是真正的文件权限,需要和umask码的反码进行按位与&运算,得到的结果才是真正的文件权限。

例如:

chmod 0666 想要的权限是rw-rw-rw-

umask码默认值为0002

最终权限为0664        rw-rw-r--

函数名:close()

头文件:#include <unistd.h>

函数原型:int close (int fd);

函数功能:关闭指定文件描述符的文件

函数参数:fd 文件描述符

函数返回值:成功,返回 0;\$不成功,返回-1。

函数使用:close(fd);

函数名write()

头文件:#include<unistd.h>

函数原型:ssize_t wrtie(int fd,const void *buf, size_t count);

函数功能:向fd文件写入buf中的count个字节数据

函数参数:

fd        文件描述符

buf        数据的来源

count        数据的长度(以字节为单位)

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

函数使用:此处向fd文件中写入一串输出hello的代码

    char buff[][20]={"#include <stdio.h>\n",
        "int main(){\n",
        "printf(\"hello\");\n",
        "return 0;\n}\n"};
    write(fd,buff,sizeof(buff));

函数名:read()

头文件:#include<unistd.h>

函数原型:size_t read(int fd,void *buf,size_t count);

函数功能:从fd文件当前位置读取count个字节的数据存于buf中。

函数参数:

fd        文件描述符

buf        数据存放位置

count        读取数据长度(以字节为单位)

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

函数使用:上面的例子中,我们把字符串写入fd文件后,可以把fd文件中的数据读取出来。在此之前,先将光标移至文件开头。读取后,可以从缓冲区输出。

lseek(fd,0,0);
read(fd,buff,sizeof(buff));
printf("%s\n%s\n%s\n%s\n",buff[0],buff[1],buff[2],buff[3]);

函数名:lseek()

头文件:

#include <sys/types.h>

#include<unistd.h>

函数原型:off_t lseek(int fd ,off_t offset,int whence);

函数功能:定位光标,移动到指定位置

函数参数:

fd        文件描述符

offset        偏移量        负数往前偏移 0不动 正数向后偏移

whence        基准位置        开头0--当前1--末尾2

函数返回值:成功返回文件开头到光标位置的偏移量,不成功返回-1

函数使用:

lseek(fd,0,0);

时间编程

有关时间的shell命令

UTC        国际时间

CST        中国时间        UTC+8

date:查看时间

时间函数(API)

本质上都是显示时间的,只是格式不同

函数名:time()

头文件:#include<time.h>

函数原型:获取1970-01-01 00:00:00(UTC)开始到当前的秒的计数值

函数参数:tloc----填0

函数返回值:从1970-01-01 00:00:00(UTC)开始到当前的秒的计数值

函数使用:

time_t tm=time(0);

函数名:localtime()

函数原型:struct tm *localtime(const time_t *timep);

函数功能:把time_t类型的tm保存的秒数转换为struct tm类型的结构体数据

函数参数:timep        通过time(0)得到的秒数的变量地址

函数返回值:已经转换完成的数据结构体的地址

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 */
           };

函数使用:

time_t tm = time(0);//获取当前日历时间
struct tm * lm = localtime(&tm);//从给定时间tm获取本地时间localtime
printf("%04d_%02d_%02d_%02d_%02d_%02d.log",lm->tm_year+1900,lm->tm_mon+1,lm->tm_mday,lm->tm_hour,lm->tm_min,lm->tm_sec);

可以注意到这里输出年份、月份时分别进行了处理操作。因为年份是从1900年往后开始计数的,而月份的范围是0-11,所以输出时要进行处理操作。

函数名:gmtime()

函数原型:struct tm * gmtime(const time_t * timep);

函数功能:转换为国际时间

函数参数:填&tm(time(0)获取到的秒数变量地址)

函数返回值:转换后的结构体地址;

函数名:ctime()

函数原型:char * ctime(const time_t *timep);

函数功能:把秒数转换为中国标准时间

函数参数:秒数的地址

函数使用:

time_t tm = time(0);
char * cm = ctime(&tm);
printf("%s\n",cm);

localtime/gmtime/ctime使用的是同一个结构体保存秒数转换后的数据

验证程序:

time_t tm = time(0);
struct tm * lm = localtime(&tm);
struct tm * gm = gmtime(&tm);
char *cm = ctime(&tm);
printf("%d\n",lm->tm_hour);
printf("%d\n",gm->tm_hour);
printf("%s\n",cm);

函数名:asctime()

函数原型:char *asctime(const struct tm *tm);

函数功能:把国际标准时间转换为字符串形式

函数参数:国际标准时间,来自于 localtime()和 gmtime()的返回值

函数返回值: 返回时间的字符串形式

函数使用:

time_t tm = time(0);
struct tm *lm = localtime(&tm);
char *lp = asctime(lm);
printf("%s\n",lp);

函数名:strftime()

函数原型:size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

函数功能:以指定格式显示时间

函数参数:

s:格式化写入的数组首地址

max:写入数组的大小

format:相当于 printf 的””,以下为格式控制符

tm:localtime 或者 gmtime 的返回值

函数使用:

char buff[100]={0};
time_t tm = time(0);
struct tm * lm = localtime(&tm);
strftime(buff,100,"%x %X",lm);
printf("%s\n",buff);

注意到这里的格式控制符%x之前没有见过

所以额外了解一下这些格式控制符:

标签:24,文件,函数,int,编程,tm,fd,time
From: https://blog.csdn.net/Charary/article/details/143733761

相关文章

  • java项目处理OFD文件
    一、导入jar依赖包1.1Maven项目引入jar包<dependency><groupId>org.ofdrw</groupId><artifactId>ofdrw-converter</artifactId><version>2.0.2</version></dependency>二、实现思路1、直接解析ofd获取其内容,在此不多述2、走OCR识别1......
  • C++ 编程基础(5)类与对象 | 5.8、面向对象五大原则
    文章目录一、面向对象五大原则1、单一功能(SingleResponsibilityPrinciple,SRP)2、开放封闭原则(Open/ClosedPrinciple,OCP)3、里氏替换原则(LiskovSubstitutionPrinciple,LSP)4、接口隔离原则(InterfaceSegregationPrinciple,ISP)5、依赖倒置原则(DependencyInversio......
  • C++ 编程基础(5)类与对象 | 5.7、友元
    文章目录一、友元1、友元函数1.1、声明友元函数1.2、友元函数的特性2、友元类2.1、声明友元类2.2、友元类的特性3、使用场景4、注意事项5、总结前言:在C++中,友元类和友元函数是一种特殊的访问控制机制,允许一个类授予另一个类或函数特殊的访问权限。通过使用友元......
  • 在华为开发者空间,简单几步带你实现AI风格化编程
    本文分享自华为云社区《【开发者空间实践指导】基于FunctionGraph的AI风格化编程》,作者:开发者空间小蜜蜂。一、案例介绍本实验基于FunctionGraph和ModelArts的智能头像动漫化处理应用。通过部署在FunctionGraph上的函数,用户可以上传自己的头像图片,通过调用ModelArts上的动漫头......
  • 【Python学习笔记】 第9章 元组、文件和其他核心类型
    元组Python元组的属性:任意对象的有序集合通过偏移量存取属于“不可变序列”固定长度、多样性、任意嵌套对象引用的数组元组的常见方法:运算解释()空元组T=(0,)单个元素的元组T=(0,'Ni',1.2,3)四个元素的元组T=0,'Ni',1.2,3还是四个元......
  • 2024年CRM系统性能评测:主流品牌大对决
    一、销售易CRM1.功能:销售易是一款集营销、销售、伙伴管理和售后服务于一体的综合性系统。其主要功能包括营销服全流程管理、分析决策和客户洞察。系统支持智能拓客、线索管理、产品报价、交易管理以及多维度组织支撑等,帮助企业从线索到回款实现全流程自动化和智能化闭环管理,显著......
  • Linux 磁盘、分区、文件系统、挂载
    1、磁盘Linux所有设备都被抽象成为一个文件,保存在/dev目录下。设备名称一般为hd[a-z]或sd[a-z]。如果电脑中有多硬盘,则设备名依次为sda、adb、sdc...以此类推IDE设备的名称为hd[a-z]。SATA、SCSI、SAS、USB等设备的名称称为sd[a-z]。 2、分区在Linux中,使用备名称+分区号......
  • 2024鹏城杯-misc
    网安第一课改zip解压找到key1key26iMmn76ucYG9PDtsvu解压之后上脚本fromPILimportImageimages=[Image.open(f"{i}.png")foriinrange(1,38)]qr_code=Image.new("RGB",(128,128),(255,255,255))foriinrange(37):img1=images[i]......
  • 2024鹏城杯-re
    Rafflesia先去花指令a='H@^jHwpsH)[jH{M/\\tBBK_|-O{W.iJZ7\\)|~zaB^H+Lwv{SS|-j@\\_[Y'flag=''foriinrange(len(a)):flag+=chr(ord(a[i])^0x18)print(flag)PXFrPohkP1CrPcU7DlZZSGd5WcO6qRB/D1dfbyZFP3ToncKKd5rXDGCA接着是tls改了表H......
  • 2024年美亚杯个人资格赛WP
    官方答案未出,仅代表个人观点 容器密码:eS2%u@q#hake2#Z@6LWpQ8^T(R7cg95m\Bv+y;$=/dqxYnEusFf)tb>:HKHwy+e%cR\r=9j:GsK)AV52/3hXfdv8#u7a6JQ^pz><YPNkq*!&案情简介 2024年8月某日,香港警方接获一名本地女子Emma报案,指她的姐姐Clara失联多天,希望报告一宗失踪人口的案件。......