主机显示、设置时间举例。
⑴ 使用参数u表示UTC时间 设置时间可以使用命令及参数: date –u MMDDhhmmYYYY.ss
其中u表示UTC,从MM开始的参数分别表示月、日、时、分、年和秒。 例如:
[root@localhost ~]# date -u 011016302013.30 2013年 01月 10日 星期四 16:30:30 UTC
系统会将设置的UTC时间,自动转换成CST时间显示,例如输入date命令后,会显示:
[root@localhost ~]# date
2013年 01月 11日 星期五 00:31:42 CST ⑵ 不使用参数u表示按当地时间设置 以下设置没有设置秒,缺省值为0: [root@localhost ~]# date 011016322013 2013年 01月 10日 星期四 16:32:00 CST [root@localhost ~]# date
2013年 01月 10日 星期四 16:32:11 CST
3.要求学生了解以下程序的含义,为程序加注释。在此基础上,在实验五helloword 程序中,增加显示日期和时间、以及自己名字的代码。 4.自己编写对应的Makefile文件。 5.程序部分
以程序中time()函数读取时间的秒值;gmtime()函数将这个秒值转换成一个结构,保 存在tm_ptr中;ctime()函数把秒值转换成一个字符串;printf()函数将秒值、结构、字符串输出。sleep(3)函数表示休眠3秒,然后重复读取秒值、转换成结构和字符串输出。
程序代码为: #include
struct tm *tm_ptr; time_t the_time; (void)time(&the_time);
tm_ptr=gmtime(&the_time);
printf(\
printf(\
printf(\tm_sec);
printf(\
sleep(3);
(void)time(&the_time); tm_ptr=gmtime(&the_time);
printf(\
printf(\->tm_mday);
printf(\
tm_ptr->tm_hour,tm_ptr->tm_min,tm_ptr->tm_sec);
printf(\
return 0; }
6.编写Makefile文件,执行程序,将试验结果写到报告中。 7.将目标板的时间改成当前时间,再次执行该程序。
-/-/-\\n\
实验七 串行端口及标准输入/输出/错误编程举例
四、实验原理
⒈ 系统调用、库函数和设备驱动程序
Linux中系统调用、库函数和设备驱动程序之间的关系,如图所示。
用户程序可以直接使用系统调用;也可以通过库函数(如标准I/O库函数对应的头文件是stdio.h),由库函数去调用系统调用。由系统调用去调用设备驱动程序,驱动硬件设备工作。
系统调用也是一些函数,它们由Linux直接提供,是通向操作系统本身的接口。 Linux系统把不同的设备,抽象成不同的文件;对设备的操作,抽象成对文件的open、read、write、close和ioctl等操作。
2.Linux标准输入/输出/错误系统调用
Linux标准输入/输出/错误这一术语的含义,是指标准输入设备/标准输出设备/标准错误输出设备。在一个用户程序运行时,系统已经打开了这3个设备,并且返回了相应的文件描述符。
Linux环境中,每个运行的程序被称为进程(process),每个进程有一些与之相关联的文件描述符。文件描述符是一些小数值的整数,通常由用户打开(open)一个文件或设备时产生的返回值得到。
当一个用户程序开始运行时,它一般可以使用3个已经打开设备返回的文件描述符,这3个描述符不是由用户程序中打开(open)操作返回的,而是由系统产生的。这3个文件描述符是:
0表示标准输入,例如read(0,&c,1);表示从标准输入读入一个字符保存在c中; · 1表示标准输出,例如write(1,&c,1);表示输出c中的一个字符到标准输出; · 2表示标准错误,例如write(2,&c,1);表示输出c中的一个字符到标准错误。 当一个程序运行结束时,也不用通过这3个文件描述符去关闭(close)对应的文件或设备。
3. 标准输入/输出/错误与串行端口及仿真终端
嵌入式开发系统目标板上运行的程序,通常把标准输入/输出/错误对应的文件,与目标板上第一个串行端口,即/dev/tts/0设备关联起来。对标准输入/输出/错误的操作,就是对该串行端口的读、写操作。由于目标板第一个串行端口通过电缆与主机串行端口连接,主机Linux系统启动minicom仿真终端程序后,目标板运行的程序中的标准输入系统调用,读入的是主机键盘输入内容,而标准输出和标准错误系统调用将输出的信息,通过串口送到主机仿真终端窗口。
使用标准输入/输出/错误系统调用时,不需要对串行端口重新设置波特率、帧格式、有无调制解调器等参数,默认使用目标板Linux内核已经设定的值。
五、实验步骤
1.程序部分
在目标板运行这个程序后,用户在主机minicom终端输入一个小写字母并回车,程序会自动输出全部小写字母,然后输出回车;继续输出全部小写字母,输出回车;直到用户按下Ctrl+c,程序终止;如果用户最初输入的不是小写字母,则程序直接退出。
程序代码如下: #include
/*--------------------------------------------------------*/ int main() {
char c; int STOP=FALSE;
write(2,\/*标准错误系统调用*/
write(1,\/*标准输出系统调用*/
write(1,\write (1,\while (1)
{
read(0,&c,1); /*标准输入系统调用*/ if ((c < 'a') || (c > 'z' )) { STOP=TRUE; break; }
write(1,\ write(1,&c,1);
write(1,\ c='a';
while (STOP==FALSE) {
write(1,&c,1); c++;
usleep(100000);
if (c=='z'+1) { c='\\n';write(1,&c,1);c='a';} } }
write(1,\exit(0); }
2. 要求学生了解以上程序的含义,为程序加注释。 3.自己编写对应的Makefile文件。 4.在目标板上执行上述程序,记录输出信息。
5.提示:假定上述程序代码、Makefile文件已经输入,保存在主机Linux的/home/nfs目录下,程序代码在目标板执行。 6.修改上述程序编程实现下述功能
(1)如果在仿真终端键盘输入为数字,则程序输出“0123456789”;
(2)如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母; (3)如果在仿真终端键盘输入为大写字母,则程序输出“ ~z”的26个大写字母; (4)如果在仿真终端键盘输入其他字符,则程序终止。
七、注意事项
1. 自行编写Makefile文件。
2. 改写程序,使其在一个程序中实现如果在仿真终端键盘输入为数字,则程序输出“0123456789”;如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母;如果在仿真终端键盘输入为大写字母,则程序输出“ ~z”的26个大写字母;如果在仿真终端键盘输入其他字符,则程序终止。
。