user-0 提问: C语言编写自动关机程序

回复:
user: user-0
content: 因为用time_t这类函数，输出的结果会包含月份、日期、具体时间和年份， 我的思路是利用 strcmp("18-30-00", "23-30-00")这个函数来比较时、分、秒，在用system（“shutdown -s -t 10”）来关机，您看这个可行吗？

user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> #include <time.h> #include <time.h> #include <sys/timeb.h>  struct tm st; time_t tt; char mon[4]; char mn[12][4]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; int i; char timstr[27]; char tmpbuf[128]; struct _timeb tb; int tz; char c;  void main() {     strcpy(timstr,"08/Dec/2011:15:25:03 +0800");     sscanf(timstr,"%2d/%3s/%4d:%2d:%2d:%2d",&st.tm_mday,mon,&st.tm_year,&st.tm_hour,&st.tm_min,&st.tm_sec);     for (i=0;i<12;i++) if (0==stricmp(mn[i],mon)) {st.tm_mon=i; break;}     st.tm_year-=1900;     tt=mktime(&st);     if (-1!=tt) {         strftime(tmpbuf,128,"%Y-%m-%d %H:%M:%S\n",localtime(&tt));         printf(tmpbuf);//2011-12-08 15:25:03     } else {         printf("[%s] is Invalid time string!\n",timstr);     }      _ftime(&tb);     strftime(tmpbuf,128,"%m/%b/%Y:%H:%M:%S",localtime(&tb.time));     tz=-tb.timezone;     c=(tz>0)?'+':'-';     tz=(tz>0)?tz:-tz;     sprintf(tmpbuf,"%s %c%02d%02d\n",tmpbuf,c,tz/60,tz%60);     printf(tmpbuf);//12/Dec/2011:17:36:41 +0800 }   C:\>shutdown /? 用法: shutdown [/i | /l | /s | /r | /a | /p | /h | /e] [/f]     [/m \\computer][/t xxx][/d [p:]xx:yy [/c "comment"]]      没有参数   显示帮助。这与键入 /? 是一样的     /?         显示帮助。这与不键入任何选项是一样的     /i         显示图形用户界面(GUI)。                这必须是第一个选项     /l         注销。这不能与 /m 或 /d 选项一起使用     /s         关闭计算机     /r         关闭并重启动计算机     /a         放弃系统关闭。                这只能在超时过程中使用     /p         关闭本地计算机，没有超时或警告。                这只能与 /d 选项一起使用     /h         休眠本地计算机。                这只能与 /f 选项一起使用     /e         将计算机的意外关闭原因记入文档     /m \\computer 指定目标计算机     /t xxx     设置关闭前的超时为 xxx 秒。                有效范围是 0-600，默认为 30     /c "comment" 重启动或关闭的原因的注释。                最大允许 127 个字符     /f         强制正在运行的应用程序关闭而不事先警告用户     /d [p:]xx:yy  提供重启动或关闭的原因                p 表明重启动或关闭是计划内的                xx 是主要原因号(小于 256 的正整数)                yy 是次要原因号(小于 65536 的正整数)

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-2
content: 这个还要编程？直接输入at命令不就行了？ 写个bat  at 23:30:00 shutdown -s   然后吧这个bat放入启动组，ok 编程也简单啊，一句system()就行了，只不过觉得这个纯粹调用系统命令好像没有什么必要编程了。哦，编程可能要方便点，可以自动设置自动启动，或者搞成自动启动服务啥的都可以，也是具有一定逻辑的，也不能说完全没有什么必要，看你了，功能实现就是调用系统命令，你看是否需要编程，从某个角度完全钓鱼系统命令行，已经没什么必要编程了，从某个角度又可以编程，实现自动启动这种特殊的逻辑，或者把他封装成exe，定时启动，这样可能看起来也比bat爽一点，还可以后台运行。

user: user-1
content: 比较和计算时间间隔请用： difftime Finds the difference between two times.  double difftime( time_t timer1, time_t timer0 );  Routine Required Header Compatibility  difftime <time.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  difftime returns the elapsed time in seconds, from timer0 to timer1. The value returned is a double-precision floating-point number.  Parameters  timer1  Ending time  timer0  Beginning time  Remarks  The difftime function computes the difference between the two supplied time values timer0 and timer1.  Example   /* DIFFTIME.C: This program calculates the amount of time  * needed to do a floating-point multiply 10 million times.  */  #include <stdio.h> #include <stdlib.h> #include <time.h>  void main( void ) {    time_t   start, finish;    long loop;    double   result, elapsed_time;     printf( "Multiplying 2 floating point numbers 10 million times...\n" );        time( &start );    for( loop = 0; loop < 10000000; loop++ )       result = 3.63 * 5.27;     time( &finish );     elapsed_time = difftime( finish, start );    printf( "\nProgram takes %6.0f seconds.\n", elapsed_time ); }   Output  Multiplying 2 floats 10 million times...  Program takes      2 seconds.   Floating-Point Support Routines |  Time Management Routines  See Also   time