目录
localtime/gmtime/ctime使用的是同一个结构体保存秒数转换后的数据
文件操作
基于缓冲区的文件操作--高级IO
缓冲区数据清空的条件:
- 遇到'\n'
- 缓冲区满
- 程序停止
- 使用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