各种标准io的函数【2】

今日思维导图

1.关于时间的操作

  #include <time.h>

       time_t time(time_t *t);

功能:获取系统当前时间的毫秒数

参数:如果是NULL,则通过返回值返回毫秒数

           如果参数不是NULL,则可以通过参数得到毫秒数

返回值:成功返回毫秒数,失败返回time_t类型的-1,并置位错误码

struct tm*localtime(const time_t *timep);

功能:通过给定的毫秒数,转变成时间

参数:毫秒数

返回值:struct tm结构体指针,失败返回NULL,并置位错误码

2.sprintf函数

#include<stdio.h>

int sprintf(char *str, const char *format, ...);

功能:向给定的字符数组中,存放进行了格式化后的字符串

参数1:字符数组首地址

参数2:格式串

参数3:格式串对应的可变参数

返回值:成功返回格式串的长度,失败返回负数

3.snprintf函数

int sprintf(char *str, int size,const char *format, ...);

功能:将格式串转换为字符串,但是有长度size控制,并在后面补上'\0'

参数1:存放格式化串的数组

参数2:   格式化的长度

参数3:格式控制串

参数4:格式串对应的可变参数

4.fprintf函数

int fprintf(FILE *stream,const char *format,...)

功能:向给定文件中写入一个格式串

参数1:文件指针

参数2:格式化串

参数3:不定参数,根据格式化串的格式控制符;来确定个数

返回值:成功返回格式串的长度,失败返回负数

5.fscanf函数

int fscanf(FILE *stream,const char *format,...)

功能:向给定文件中,以格式化控制符从文件中摘取数据放入程序中

参数1:文件指针

参数2:格式化串

参数3:地址列表

返回值:成功返回格式串的长度,失败返回EOF并置位错误码

6.fread,fwrite函数的使用

  #include <stdio.h>

       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:从给定文件中,读取nmemb项数据,每项数据大小为size,将数据放入ptr中

参数1:存放数据的指针,是一个万能指针,可以接受任意类型的数据

参数2:读取数据每一项的大小

参数3:读取的项数

参数4:文件指针

返回值:成功返回读取的项数,当size为1时,就是成功读取的字节数,失败返回小于项数的值或0

       size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                     FILE *stream);

功能:将ptr指向的数据,每项数据的大小为size,一共有nmemb项,写入stream文件中

参数1:存放数据的指针,是一个万能指针,可以接受任意类型的数据

参数2:读取数据每一项的大小

参数3:读取的项数

参数4:文件指针

返回值:成功返回读取的项数,当size为1时,就是成功读取的字节数,失败返回小于项数的值或0

作业

获取系统时间,并将系统时间写入文件中,实现现象

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int argc,const char *argv[])
{  
	FILE *fp;
	if((fp=fopen("./time.txt","a+"))==NULL)
	{
		perror("open file");
		return -1;
	}
	int i=0;

	while(i!=3)
	{
		time_t sys_time=time(NULL);//获取系统时间的毫秒数
		//将毫秒数转变成时间结构体
		struct tm* fomattime=localtime(&sys_time);

		fprintf(fp,"%4d-%2d-%2d %2d:%2d:%2d\n",fomattime->tm_year+1900\
				,fomattime->tm_mon+1,\
				fomattime->tm_mday,\
				fomattime->tm_hour,\
				fomattime->tm_min,\
				fomattime->tm_sec);
		i++;//控制循环次数
		sleep(1);//睡一秒
	}
	return 0;
}

改进:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int getLine(FILE *fp)
{
	char buf[10];//读取数据的容器
	int line=0; //记录行号
	while(fgets(buf,sizeof(buf),fp)!=NULL)
	{
		if(buf[strlen(buf)-1]=='\n')
		{
			line++;
		}
	}
	return line;
}
int main(int argc,const char *argv[])
{  
	//定义接受秒钟的变量
	time_t currentTime,oldTime;
	//定义系统时间的结构体变量
	struct tm*sysTime;
	//定义文件指针,用于打开文件
	FILE *fp;
	//定义格式串用于存储时间
	char buf[100];
	//定义变量记录获取文件的行号
	int line;
	if((fp=fopen("./tim.txt","a+"))==NULL)
	{
		perror("open file error");
		return 1;
	}
	//获取文件的行号
	line=getLine(fp);
	int count=0;
	while(count!=3)
	{
		currentTime=time(NULL);//获取系统时间的秒钟数
		sysTime=localtime(&currentTime);//将秒钟数转化为系统时间
		if(currentTime!=oldTime)
		{
			oldTime=currentTime;
			sprintf(buf,"%3d.%4d-%02d-%02d %02d:%02d:%02d\n",
					++line,
					sysTime->tm_year+1900,	
					sysTime->tm_mon+1,	
					sysTime->tm_mday,	
					sysTime->tm_hour,
					sysTime->tm_min,	
					sysTime->tm_sec
				   );
			//将文件写入字符串
			fputs(buf,fp);
			fflush(fp);
			count++;
		}

	}
	return 0;
}

用fread 和 fwrite实现拷贝

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define err(x) perror(x);return-1;
int main(int argc,const char *argv[])
{  
	//fwrite fread 实现copy
	if(argc!=3)
	{
		puts("error");
		puts("usage:./a.out srcfile destfile");
		return -1;
	}
	FILE *srcfile,*destfile;
	char str[20]={0};
	if((srcfile=fopen(argv[1],"r"))==NULL)
	{
		err("open file");
	}
	if((destfile=fopen(argv[2],"w"))==NULL)
	{
		err("open file");
	}
	int ret;
	while((ret=fread(str,sizeof(char),1,srcfile))!=0);
	{ 
			fwrite(str,sizeof(char),1,destfile);
	}
	fclose(srcfile);
	fclose(destfile);

		return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常用的五个函数(I/O) 1. 图像载入函数 函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下: IplImage* cvLoadImage( const char* filename, int iscolor); 其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。 2. 窗口定义函数 函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下: int cvNamedWindow( const char* name, unsigned long flags ); 其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。 函数 cvDestroyWindow(const char* name);销毁以上定义的窗口。 name是窗口名 3. 图像显示函数 函数cvShowImage是在指定的窗口中显示图像,其函数原型如下: void cvShowImage( const char* name, const CvArr* image ); 其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。 4. 图像保存函数 函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下: int cvSaveImage( const char* filename, const CvArr* image ); 其中,filename是图像保存路径和名称,image是IplImage指针变量。 5. 图像销毁函数 函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间。其函数原型如下: void cvReleaseImage( IplImage** image ); 其中,image为已定义的IplImage指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值