当前位置:首页 > 《计算机操作系统》实验指导书
删除在本实验中创建的文件和目录。 关闭终端窗口,注销。
第三部分 Linux声音设备编程 让扬声器按指定的长度和音频发声
# include
// 设定默认值
# define DEFAULT_FREQ 440 // 设定一个合适的频率 # define DEFAULT_LENGTH 200 // 200微秒,发声的长度以微秒为单位 # define DEFAULT_REPS 1 // 默认不重复发声 # define DEFAULT_DELAY 100 // 同样以微秒为单位
// 定义一个结构,存储所需的数据 typedef struct {
int freq; // 期望输出的频率,单位为Hz int length; // 发声长度,以微秒为单位 int reps; // 重复的次数 int delay; // 两次发声间隔,以微秒为单位
} beep_parms_t;
// 打印帮助信息并退出
void usage_bail(const char *executable_name) {
printf(\ exit(1) ;
}
// 分析运行参数,各项意义如下: // \以Hz为单位的频率值>\// \以毫秒为单位的发声时长>\// \重复次数>\
// \以毫秒为单位的间歇时长>\
void parse_command_line(char **argv, beep_parms_t *result) {
char *arg0 = *(argv++) ; while (*argv) { if (!strcmp(*argv, \ { // 频率 int freq = atoi(*( ++argv) ) ; if ( (freq <= 0) || (freq > 10000) ) {
fprintf(stderr, \ exit(1) ; } else {
result -> freq = freq; argv++; } } else if (!strcmp(*argv, \ { // 发声的时间长度 int length = atoi( *(++argv) ) ; if (length < 0)
{ fprintf(stderr, \ exit(1) ; } else {
result -> length = length; argv++; } } else
if (!strcmp(*argv, \ { // 重复次数 int reps = atoi( * (++argv) ) ; if (reps < 0) {
fprintf(stderr, \:reps must be >= 0\\n\ exit(1) ; } else {
result -> reps = reps; argv++; } } else
if (!strcmp(*argv, \ { // 延时 int delay = atoi( * (++argv) ) ; if (delay < 0) { fprintf(stderr, \ exit(1) ; } else {
result -> delay = delay; argv++; } } else {
fprintf(stderr, \:%s\\n\ usage_bail(arg0) ; } } }
int main(int argc, char **argv) {
int console_fd; int i; // 循环计数器 // 设发声参数为默认值 beep_parms_t parms={DEFAULT_FREQ, DEFAULT_LENGTH, DEFAULT_REPS, DEFAULT_DELAY} ; // 分析参数,可能的话更新发声参数 parse_command_line(argv, &parms) ; // 打开控制台,失败则结束程序
if ( (console_fd = open(\ { fprintf(stderr, \ perror(\ exit(1) ; }
// 真正开始让扬声器发声
for (i = 0; i < parms.reps; i++) {
// 数字1190000从何而来,不得而知
int magical_fairy_number = 1190000/parms.freq;
ioctl(console_fd, KIOCSOUND, magical_fairy_number); // 开始发声 usleep(1000 * parms.length) ; // 等待? ioctl(console_fd, KIOCSOUND, 0) ; // 停止发声
usleep(1000 * parms.delay) ; } return EXIT_SUCCESS; }
// 等待? // 重复播放
运行结果 (如果运行不成功,则可能的原因是什么?) :
____________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 适当调整参数的值,看看声音有何变化。
____________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________
将上面的例子稍作扩展,我们就可以让扬声器唱歌。只要找到五线谱或简谱的音阶、音长。节拍和频率、发声时长、间隔的对应关系就可以了。
四、实验总结
请总结一下本次实验的收获、教训和感受,结合课本内容谈一下你对操作系统中输出/输出设备管理的理解。
实验五 文件系统
三、实验目的
通过本实验,要求学生熟练掌握Linux各种文件操作命令,包括:使用控制字符执行特殊功能;使用file和strings命令确定文件类型;使用cat利more命令显示文本文件的内容;使用head和tail命令显示文本文件的部分内容;使用wc命令确定单词、行和字符数;使用diff命令比较2个文件;回顾文件和目录命名约定;使用touch命令创建新文件;使用mkdir命令创建新目录;使用rm命令删除文件;使用rm -r命令删除目录。
二、实验环境
硬件环境:计算机一台,局域网环境;
软件环境: Linux Redhat 9.0操作系统平台。 三、实验内容和步骤 1. 文件信息命令
步骤1:开机,登录进入GNOME。
在GNOME登录框中填写指导老师分配的用户名和口令并登录。 步骤2:访问命令行。
单击红帽子,在“GNOME帮助”菜单中单击“系统工具”-“终端”命令,打开终端窗口。 步骤3:使用控制字符执行特殊功能。
控制字符用来执行特殊的作业,如中止和启动屏幕输出。
大多数PC键盘有两个控制键。它们通常标记为Ctr1,可以在键盘的左右下角找到。为了输入一个控制字符序列,可按住Ctrl键不放,然后按下键盘上相应的字符。
Ctrl + C:中断当前活动。当你在csh中键入一个不可识别的命令行 (例如,$ls “) ,收到第2个提示符的时候,Ctrl + C也可以用于恢复shell提示符。
Ctrl + Z:终止当前活动。显示ls命令的手册页面 (man ls) ,然后使用Ctrl -z中止输出。
当你接下Ctrl + Z的时候,发生了什么事情?
____________________________________________________________________ Ctrl + D:表示文件的末尾或者退出。 Ctrl + D用于退出一些Linux工具程序 (bc、write等) ,退出一个终端窗口,注销一个终端会话或者命令行登录会话。作为一个一般的规则,当您出现“死机”时,或者如果Ctrl + C不起作用,可试试Ctrl + D。例如:
1) 在shell提示符下键入bc,启动基本的计算器工具程序。 2) 把两个数字相乘 (键入:458*594,然后按回车键) 。 3) 按Ctrl + D退出计算器。
当使用计算器的时候,你的提示符是什么?
____________________________________________________________________ Ctrl + U :擦除整个命令行。Ctrl + U最常用在: · 一个擦除决定不执行的命令行的快捷方式。 · 如果登录到一个远程系统,退格键不起作用。
· 它可以确保在登录的时候,从一个“空”的用户帐号和口令输入开始。
· 因为在口令输入的时候看不见它们,当知道自己键入了错误字符的时候,使用Ctrl + U擦除密码,重新开始输入。
如果输入一个命令,如ls –R/,有时候,会在按下回车键之前想擦除命令行。输入一个命令,在接下回车键执行命令之前按下Ctrl + U。结果是什么?
____________________________________________________________________ ________________________________________________________________________ 步骤4:使用file命令确定文件类型。
在Linux系统中可以找到许多类型的文件。文件类型可以通过使用file命令来确定。当一个用户试图打开或阅读一个文件的时候,这个信息很重要。确定文件类型可以帮助一个用户决定使用哪个程序或命令来打开这个文件。这个命令的输出最常见的是如下几种:文本文件、可执行文件或数据文件。
1) 文本文件:包括ASCII或英语文本、命令文本和可执行的shell脚本。这种类型的文件可以使用cat或more命令读取,可以使用vi或其他文本编辑器编辑。
单击红帽子,在“GNOME帮助”菜单中单击“辅助设施”-“Text Editor”命令,在文本编辑中键入适当内容并保存为test文件。
使用file命令来确定test文件的文件类型。它是哪种类型的文件?
____________________________________________________________________
2) 可执行 (或二进制) 文件:包括32位的可执行文件和可扩展链接格式(ELF) 编码文件,和其他动态链接的可执行文件。这种文件类型表示这个文件是一个命令或程序。
单击红帽子,在“GNOME帮助”菜单中单击“办公”-“OpenOffice.org Writer”命令,建立一个文档如ww.sxw。
使用file命令确定你所建立的文件类型。它是哪种类型的文件?(注意文件名部分必须包括扩展名,如file ww.sxw 。)
____________________________________________________________________
3) 数据文件:数据文件是由系统中运行的应用创建的。在某些情况下,文件的类型是会说明的。例如,FrameMaker (桌面印刷软件) 文档。
使用file命令确定dir1/coffees子目录中beans文件的文件类型。它是什么文件类型的? ____________________________________________________________________ 步骤5:使用strings命令。
strings命令可以用于打印可执行文件或者二进制文件中的可读字符。
一些有编程背景的人,可以解释strings产生的输出。这个命令在这里只是作为一个展示可执行文件中可打印字符的方法来介绍。strings命令必须用于读取可执行文件,如 /usr/bin/cat。在大多数情况下,strings命令也可以给出命令的使用语法。
使用strings命令查看 /usr/bin/cal文件的可读字符。列出strings命令中的一些输出。 ____________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 步骤6:使用cat命令显示文件的内容。
共分享92篇相关文档