重定向输如输出
#include <stdio.h>
int main(){
//将控制台输出流定义到文件
freopen("stdout.txt","a",stdout);
printf("hello world!\n");
//将a内容输入到文本中
int a;
scanf("%d",&a);
printf("stdin获取 %d\n",a);
//用来获取stdin文件中内容
freopen("stdin.txt","r",stdin);
int b;
scanf("%d",&b);
printf("%d\n",b);
//dup复制一个文件描述符
int stout_value = dup(fileno(stdout)); //没有重定向,输出到终端
printf("%d\n",stout_value);
freopen("stdout_01.txt","w",stdout); //重定向,打印到stdout_01文本中
printf("%d\n",stout_value);
//输出到终端,文档不显示
dup2(stout_value,fileno(stdout));
printf("这是dup\n");
return 0;
}
时间差,格式化时间,获取日历
#include <stdio.h>
#include <utime.h>
#include <time.h>
void t_time();
int main(){
// t_time();
t_time1();
// t_fmt();
return 0;
}
void t_time(){
time_t t1;
time_t ret;
//time()函数
//1.返回值就是时间戳
//2.实参是地址,地址里面保存的内容也是时间戳
ret = time(&t1);
printf("%lld\n",ret);
printf("%lld\n",t1);
// clock_t t2;
//
// struct timespec ts;
// clock_gettime();
}
//获取日历
void t_time1(){
time_t t1;
time(&t1);
struct tm *timeDate;
timeDate = localtime(&t1);
printf("%d年\n",timeDate->tm_year+1900);
printf("%d月\n",timeDate->tm_mon+1);
printf("%d日\n",timeDate->tm_mday);
printf("%d时\n",timeDate->tm_hour);
printf("%d分\n",timeDate->tm_min);
printf("%d秒\n",timeDate->tm_sec);
time_t t2 = mktime(timeDate);
printf("时间戳:%d\n",t2);
timeDate->tm_min = 100; //超过60分钟会加给小时
t2 = mktime(timeDate);
printf("%d年%d月%d日%d时%d分%d秒\n",timeDate->tm_year+1900,timeDate->tm_mon+1,timeDate->tm_mday,
timeDate->tm_hour,timeDate->tm_min,timeDate->tm_sec);
struct tm *gmDate = gmtime(&t1); //格林威治时间
printf("%d年%d月%d日 %d时%d分%d秒\n",gmDate->tm_year+1900,gmDate->tm_mon+1,gmDate->tm_mday,
gmDate->tm_hour,gmDate->tm_min,gmDate->tm_sec);
}
//格式化时间
void t_fmt(){
time_t t1; //定义时间戳变量
time(&t1); //通过time函数获取时间戳
struct tm *t_time = localtime(&t1); //通过localtime函数将时间戳转换为日历信息
puts(asctime(t_time)); //通过asctime()函数打印出来
puts(ctime(&t1)); //通过ctime()函数直接将时间戳以格式化日历形式输出
//自定义输出
char ch[100];
// size_t size = strftime(ch,20,"%Y-%m-%d %H:%M:%S",t_time);
size_t size = strftime(ch,100,"%Y-%m-%d %H:%M:%S 第%U周 星期%w 一年中第%j天 ",t_time);
printf("%s",ch) ;
}
//时间差
void t_fun(){
time_t t_start;
time_t t_end;
}
习题
1.
#include <stdio.h>
#include <unistd.h>
#include <utime.h>
#include <time.h>
void print();
void scan();
int main(){
scan();
return 0;
}
int a;
FILE *p = NULL;
void print(){
char ch[100];
p=fopen("print.txt","a"); //创建文件print.txt
if(NULL==p){
printf("该文件不存在!\n");
}
time_t t1; //定义时间戳变量
time(&t1); //通过time函数获取时间戳
struct tm *t;
t= localtime(&t1);
fprintf(p,"%d年%d月%d日%d:%d:%d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday, //写进文件print.txt中
t->tm_hour,t->tm_min,t->tm_sec);
}
void scan(){
p = fopen("scanf.txt","r"); //读取文件scanf.txt
fscanf(p,"%d",&a);
for(int i=0;i<a;i++){ //循环输出
sleep(1);
print(); //调用print函数
}
}
2.
#include <stdio.h>
#include <utime.h>
#include <time.h>
int main(){
time_t t;
time(&t);
struct timespec ts;
printf("%lld\n",t); //秒
clock_gettime(CLOCK_REALTIME,&ts);
long long ms=ts.tv_sec*1000+ts.tv_nsec/1000000;
printf("%lld\n",ms) ; //毫秒
long long us=ts.tv_sec*1000000+ts.tv_nsec/1000;
printf("%lld\n",us) ; //微秒
long long ns=ts.tv_sec*1000000000+ts.tv_nsec;
printf("%lld\n",ns) ; //纳秒
return 0;
}