1、编程读写一个文件test.txt,每隔1秒向文件中写入一行数据,类似这样:
1, 2007-7-30 15:16:42 2, 2007-7-30 15:16:43
该程序应该无限循环,直到按Ctrl-C中断程序。下次再启动程序写文件时可以追加到原文件之后,并且序号能够接续上次的序号,比如:
1, 2007-7-30 15:16:42 2, 2007-7-30 15:16:43 3, 2007-7-30 15:19:02 4, 2007-7-30 15:19:03 5, 2007-7-30 15:19:04
提示:
要追加写入文件,同时要读取该文件的内容以决定下一个序号是几,应该用什么模式打开文件?
首先判断一下打开的文件是否为新文件,如果是新文件,就从序号1开始写入;如果不是新文件,则统计原来有多少行,比如有n行,然后从序号n+1开始写入。以后每写一行就把行号加1。
获取当前的系统时间需要调用函数time(),得到的结果是一个time_t类型,其实就是一个大整数,其值表示从UTC时间1970年1月1日00:00:00(称为UNIX的Epoch时间)到当前时刻的秒钟数。然后调用localtime()将time_t所表示的UTC时间转换为本地时间(我们是+8区,比UTC多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒,请自己写出转换格式的代码,不要使用ctime()或asctime()函数。具体用法请查阅man page。time和localtime函数需要头文件time.h。
调用sleep(n)可使程序睡眠n秒,该函数需要头文件unistd.h。
2、INI文件是很常见的一种配置文件。比如:
;Configuration of http [http] domain=www.mysite.com port=8080 cgihome=/cgi-bin ;Configuration of db [database] server = mysql user = myname password = toopendatabase
方括号括起来的部分是section名,之后则是各个key = value键值对。等号两边可以有若干个空白字符(空格或Tab),也可以没有空白字符。注释是以分号;开始的行。一个section结束时至少有一个空行,也可以有连续几个空行,空行是仅包括0个或若干个空白字符(空格或Tab)的行。INI文件的最后一行后面可能有换行符也可能没有。
现在XML兴起了,INI显得有点土。现在要求编程把INI文件转化为XML文件。
<!-- Configuration of http --> <http> <domain>www.mysite.com</domain> <port>8080</port> <cgihome>/cgi-bin</cgihome> </http> <!-- Configuration of db --> <database> <server>mysql</server> <user>myname</user> <password>toopendatabase</password> </database>
3、我们知道C程序通常会包含一些头文件。
#include <time.h>
是指/usr/include/time.h。
# include <bits/types.h>
是指/usr/include/bits/types.h。注意,#和include之间,以及include和<文件名>之间都可以有0个或若干个空白字符(空格或Tab)。
#include "stack.h"
是指当前工作目录下的stack.h(为简化起见,不考虑编译器-I参数指定的路径)。
#include "arch/types.h"
指当前工作目录的子目录arch下的types.h。使用getcwd(3)可以得到当前工作目录的绝对路径。
我们还知道,这些头文件还可能继续包含其他的头文件,也有可能重复包含先前已包含过的头文件,甚至也可能循环包含(a.h包含b.h,b.h又包含a.h)。
现在给一个.c源文件,例如
#include <errno.h> #include "stack.h" int main() { return 0; }
要求把它编译时候可能包含的所有头文件找出来(由于有条件编译,所以只是“可能”包含),输出到一个文件里,一个头文件一行,包含绝对路径,不能重复。如果.c或.h文件include的头文件在相应目录中找不到,则输出一行错误信息。例如:
/usr/include/errno.h /home/akaedu/stack.h: cannot find /usr/include/features.h /usr/include/bits/errno.h /usr/include/linux/errno.h ......