嵌入式操作系统实验指导


    


    嵌入式操作系统





    目 录
    实验 Linux命令
    实验二 vi编辑器
    实验三 shell编程实验()
    实验四 shell编程实验(二)
    实验五 Linux开发工具
    实验六 Linux编程实验()
    实验七 Linux编程实验(二)
    实验八 Linux系统网络理实验

    实验 Linux命令
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    1. 掌握Linux般命令格式
    2. 掌握关文件目录操作常命令
    3. 掌握关进程操作常命令
    4. 熟练man命令
    二实验注意事项
    实验环境系统设施请系统做系统户安全事情求学登录系统目录(homestudent)创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    三实验容步骤:
    1.登录进入系统
    双击 VMware Workstation 进入虚拟机 点击 u 登陆Ubuntu输入户名: 输入密码: 进入Ubuntu图形桌面环境
    2.简单命令:datecalwhoechoclear等解Linux命令格式
    启动终端选择 应程序附件终端
    终端提示符输入:date屏幕显示系统日期时间
    ↲ 显示 2014年10月06日 星期 190506 CST
    终端提示符输入:who ↲ 显示: mx tty7 20141006 1902(0)
    mx pts0 20141006 1904(00)
    终端提示符输入:who am I ↲ 显示: mx pts0 20141006 1904(00)
    终端显示Hello 命令: echo Hello
    终端提示符输入:clear ↲ 显示: (清屏作)

    终端提示符输入:cal ↲ 显示: 前日历(10月份日历)

    3.浏览文件系统:
    (1)运行pwd 命令确定前工作目录记录: homemx
    (2)运行ls命令查前目录文件子目录简略记录

    (3)运行ls l命令理解文件字段含义找文件标注
    rwxrxrx 1 mx mx 711 20081104 1141 driver1c
    drwxrxrx 2 mx mx 4096 20131209 2300 Lsy3
    文件类型权限 链接数 文件 文件组 文件 建立修改时间 文件名
    文件类型:普通文件d目录文件b块设备文件c字符设备文件l符号链接文件
    文件存取权限:r读w写x执行 没设置权限
    (4)运行ls ai命令理解字段含义
    :18272 conversion 字段第项18272I结点号第二项文件名目录名a显示指定目录子目录文件包括开头隐藏文件(cache) i 输出第列显示文件I节点号
    (5)cd 命令前目录改变根目录()运行ls l命令结合书中出Linux树状目录结构解目录作
    命令: cd ↲ 回: 根目录
    命令: pwd ↲ 显示:
    命令: ls l ↲ 显示:(简略记)
    bin dev media proc boot home mnt root usr sys 等等

    (6)直接cd回里?pwd验证
    命令: cd ↲ 回: 目录
    命令: pwd ↲ 显示: homemx
    (7) mkdir建立子目录subdir
    命令: mkdir subdir ↲
    (8)前目录改subdir
    命令: cd subdir ↲
    4.文件操作:
    (1)验证前目录subdir
    命令: pwd ↲ 显示: homemxsubdir
    (2)运行date>file1然运行cat file1什信息?
    命令: date>file1 ↲ 命令: cat file1 ↲
    显示:2014年10月06日 星期 201504 CST
    >命令(执行程序)输出重新定指定文件样该命令输出屏幕显示写入文件中
    什符号? 输出重定符
    解释 date>file1date命令输出重定file1中
    含义: 前时间保存file1中file1存创建保存
    (3)先cd 回级目录运行cat subdir会什结果?什?
    结果: cat subdir Is a directory
    什? subdir目录cat查文件法查目录信息

    (4)分catmore查文件容(提示:etcmanpathconfig)较catmore两命令异
    两命令显示文件容cat直接全屏显示more分屏显示space键继续屏
    (5)利man 命令显示date命令说明
    命令: man date ↲
    显示:(简略记)


    space键继续屏显示
    man命令状态退回终端窗口? q键退回终端
    (6)运行man date>>file1运行cat file1 什?
    命令: man date>>输出附加定符:命令(执行程序)输出附加指定文件面该文件原容破坏
    file1 命令: cat file1
    显示:首先显示前日期显示date命令帮助
    man date>>file1含义: date命令帮助附加file1文件
    (7)利ls l file1解链接计数少?运行 ln file1 fa运行ls l file1链接计数变化?cat命令显示fa文件容(注意:做完删做硬链接恢复原样便面学做实验)
    命令:ls l file1↲ 显示链接计数: 1
    命令:ln file1 fafile1文件链接级目录文件fa(硬链接)

    命令:ls l file1↲ 显示链接计数: 2 变化? 变化
    命令:cat fa↲ 显示: 2014年10月06日 星期 201504 CST
    修改file1粉色部分新增加容修改file1文件链接文件修改
    文件:cal>>file1 显示file1容:cat file1 结果:日期面附加月日历
    查链接文件fa容:cat fa显示:2014年10月06日 星期 201504 CST
    十月 2014
    二 三 四 五 六 日
    1 2 3 4 5
    6 7 8 9 10 11 12
    …………………………省略
    删硬链接: rm fa 删级目录链接文件fa

    (8)headtail命令分显示file1文件前十行十行容
    命令: head file1 ↲ 命令: tail file1 ↲ (默认10行)
    命令: head 10 file1 者 head n 10 file1 ↲ 命令: tail 10 file1 ↲
    (9)运行cp file1 file2然ls l什?
    命令:cp file1 file2 ↲
    ls l↲
    :file1 file2 (屏幕file1文件外file2文件)
    解释显示结果:cp命令file1容复制file2中
    运行mv file2 file3 然ls l什?
    命令:mv file2 file3↲
    ls –l ↲
    :file1 file3 (file2文件消失file3文件)
    解释显示结果:文件file2改名file3
    运行cat f*结果样?
    命令:cat f* ↲ file1flie3容显示屏幕
    解释显示结果:
    *号通配符匹配f 开头文件述命令:显示f开头文件容
    (10)运行rm file3然ls l什?
    命令:rm file3 ↲
    命令:ls l ↲ :file3文件消失
    解释显示结果:
    rm命令file3删
    (11)etcpasswd文件中查找适合注册名行
    命令: grep F mx etcpasswd
    显示:mxx10001000mxhomemxbinbash 解释???
    (12)运行ls l理解文件权限什?(选择两文件标注)
    rwxrxrx 1 mx mx 9159 20131126 0214 tstout
    (13)两种方式改变file1权限(实例)
    ①符号模式改变权限: chmod a+w tstout (户写权限)
    ls l tstout 显示:rwxrwxrwx 1 mx mx 9159 20131126 0214 tstout
    符号模式改变权限:chmod urwx grx or file1 (户读写执行权限组读执行权限读权限)
    ls l tstout 显示rwxrxr 1 mx mx 9159 20131126 0214 tstout
    ②绝方式改变权限: chmod 0664 file1 (110110100文件组户具读写权限户读)
    (14)统计file1文件行数字数字节数
    命令: wc file1 ↲
    显示: 191 733 5732 file1
    解释参数含义: 行数 字数 字节数 文件名
    (15)运行命令man ls |more
    man ls |more含义: 分屏显示ls命令帮助信息
    运行cat file1|head 20|tee file5结果?
    显示结果: 显示file1前20行容
    cat file1|head 20|teetee指令会标准输入设备读取数容输出标准输出设备时保存文件
    file5含义: file1中前20行保存file5中显示屏幕
    运行cat file5|wc结果?
    显示结果: 20 61 544
    cat file5|wc含义: 统计file5文件行数字数字节数
    (16)运行cd回目录运行mkdir mydir建立mydir 子目录运行ls l查目录运行rmdir mydir什结果?果删mydir目录该操作?
    运行命令:cd <回车键> 回: 目录homwmx
    运行命令:mkdir mydir 建立: mydir子目录
    运行命令: ls l mydir 查建目录容显示:total 0
    运行命令:cp etcprofile homestudentmydir
    解释该命令: etcprofile 拷贝mydir子目录中
    查mydir容命令: ls mydir 显示:profile
    运行命令: rmdir mydir ↲
    什结果: rmdirfailed to remove mydir’Directory not empty

    处理? 先清空mydir子目录容删该子目录 rm mydir* rmdir mydir ls mydir
    注意:实验中没特难点注意rm命令删文件时候提示定谨慎然容易删应该删文件
    四实验报告求
    1.实验步骤写出实验命令运行结果回答提问题
    2.总结机程中遇问题解决方法感想
    实验二 vi编辑器
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    学vi编辑器建立编辑显示加工处理文文件
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    三实验容步骤
    1.进入退出vi
    (1)进入vi创建filec文件 命令: vi filec
    (2)进入插入方式输入C程序该文件存盘回shell状态
    #include
    int main()
    {
    float abx int abx
    printf(Please input ab)
    scanf(52f52fab) scanf(dd&a&b)
    xab
    printf(x52f\nx) printf(xd\nx)
    return 0
    }
    进入插入方式命令: i 文件存盘回shell状态命令: wq
    (3)运行gcc filec o myfile编译该文件会发现错误提示理解含义
    编译命令:gcc filec o myfile <回车>
    警告: filec5warningunknown conversion type character in format
    错误: filec6errorinvalid oprands to binary (have float’ and float’)
    (4)重新进入vi该文件进行修改然存盘退出vi重新编译该文件果编译通运行该程序运行程序命令:myfile
    注意:错误程序行旁边注释正确程序
    (5)运行man date>file10然vi开file10文件xdd命令删某文行u命令复原前情况crs等命令修改文容检索命令进行定模式检索
    删光标字符: x 光标位置(包括光标位)右删5字符命令: 5x者d5l
    删光标前面字符: X 光标位置(包括光标位)左删5字符命令:5X者d5h
    删光标整行: dd 光标位置(包括光标位)删行尾命令: D 者 d
    光标位置(包含光标位)删行首命令: d0
    复原命令:u(取消刚插入删命令)
    U(直接前行恢复成编辑前状态做少次修改)
    修改命令举例:(修改文象新输入文代老文等价删命令删老文然i命令输入新文ESC回命令状态)
    c :c5GHello+ESC 删光标行第5行文然输入HelloESC
    C :CWelcome+ESC 修改光标位置开始该行尾(符标记)文welcome代
    cc :ccHow nice+ESC 删前行How nice代
    取代命令举例:
    r :r99取代光标字符5rA光标位开始右5字符A取代ESC
    R: 输入文取代光标位面字符输入取代ESC
    换命令举例:
    s 输入正文换光标字符(处插入状态光标面字符保存)ESC
    S: 输入正文换前整行3S表示3行(包含前行)新文代
    搜索命令:
    前字符串检索举例:date+Enter(模式+Enter键) 解释:前行开始前查找date字符串
    current+Enter(模式位移+Enter键) 解释:前行开始前查找date字符串光标停首先找行前行行首
    current数字+Enter(模式位移+Enter键) 解释:前行开始前查找date字符串光标停(行号匹配行号n)行首
    current++Enter(模式位移+Enter键)解释:前行开始前查找date字符串光标停首先找行行行首
    current+数字+Enter(模式位移+Enter键)解释:前行开始前查找date字符串光标停(行号匹配行号+n)行首
    字符串检索举例:man+Enter(模式+Enter键) 解释:前行开始查找man字符串
    man+Enter (模式位移+Enter) 解释:前行开始查找man字符串光标停首先找行前行行首
    查找字符命令举例: fg (f字符) 解释: 前行前找字符g
    Fd (F字符) 解释: 前行找字符d
    置标记命令:(添加命令)


    全局换命令举例: gtime sTIMEgc 解释:TIME换出现time确认换
    1stimeTIMEgc 解释: 第行行行尾TIME换出现time确认换
    2.新建文件
    (1)请目录(homestudent)建立名 vitest 目录
    命令: cd 回车 mkdir vitest
    (2)进入 vitest 目录中
    命令: cd vitest
    (3) etcmanpathconfig 拷贝目录
    命令: cp etcmanpathconfig ﹒
    (4) vi 开启目录 manpathconfig 文件
    命令: vi manpathconfig
    (5) vi 中设定行号
    设置行号命令: set nu (取消行号命令: set nonu )
    (6)移动第67 行右移动 26 字符请问您什目录?
    移动第67 行命令: 67GCtrl+G前行行号
    右移动 26 字符命令:26l or 26+Space键 or 26>
    : varcacheman
    (7)左移动16字符命令:16h or 16+Backspace键 or 16< : usrshareman
    (8)回前行第字符处命令: 0 or ∧ 移动前行行尾命令:
    (9)移动第5行(包含前行)词尾命令: 5Ge 回前行第字符处 0
    (10)光标前移词开头命令: wW
    (11)光标退前词开头命令: bB
    (12)移动第行搜寻『 modify 』字符串请问第行?
    移动第行: 1G 搜寻modify modify+Enter键 76 行
    (13)接着 50 70 行间 name 改 NAME 挑选否需修改达指令?
    命令: 5070snameNAMEgc 者 5070gmansMANgc
    (14)修改完突然反悔全部复原方法?
    u写写???
    or :q(保存退出vi)
    (15)复制5160行十行容贴行
    51G10yyGp or 51G10yy回车p
    (16)删1130行间20行
    11G20dd or 11Gd30G or 1130d or 11G19d(先11行ex命令删前行面19行)
    (17)第29行删 15 字符
    29G 15x 者 29G d15l
    (18)文件存成 mantestconfig 文件
    w mantestconfig
    (19) 请问目前文件少行少字符?什命令统计?
    命令:w 者回shell窗口wc –lw manpathconfig
    (20)储存离开吧
    :wq
    四实验报告求
    1.实验步骤写出实验命令运行结果回答提问题
    2.总结机程中遇问题解决方法感想

    资料:
    复制操作:
      yy:复制前整行容vi缓区
      yw:复制前光标位置单词尾字符容vi缓存区相复制单词
      y:复制光标位置行尾容缓存区
      y^:复制光标位置行首容缓存区
      #yy:例:5yy复制5行
      #yw:例:2yw复制两单词
    果复制第m行第n行间容末行模式中输入mny例:35y复制第三行第五行容缓存区
    粘贴操作:
    粘贴命令式pput(放)
    p 写p代表贴游标()游标具体字符位置实际该字符面
    P 写P代表贴游标前()
    整行复制粘贴游标()行非整行复制粘贴游标前()

    实验三 shell编程实验()
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    1.解shell作分类
    2.掌握bash建立执行方式
    3.掌握bash基语法
    4.综合Linux常命令vi编辑器熟练掌握shell脚编程
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情
    求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    三实验容
    1.利vi 建立脚文件该文件户输入年月动印出该年该月日历然3种方式执行该脚执行情况请说明原
    vi mycal(进入vi环境输入列脚程序)
    echo Please input month
    read month #键盘读入月份month变量
    echo Please input year
    read year #键盘读入年份year变量
    cal month yearbash
    :wq回车(保存文件退出vi)
    执行脚方法:
    方法:输入定shell脚(格式:bash<脚名)
    bash结果:执行脚
    原:该方法带参数运行包括程序中键盘读入参数命令
    方法二:脚名作bash参数(格式:bash 脚名 [参数])
    bash mycal 回车
    显示: Please input month
    12
    显示: Please input year
    2013
    结果: 十二月 2013
    二 三 四 五 六 日
    1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31
    方法三:shell脚权限设置执行然提示符直接执行(chmod命令)
    chmod a+x mycal #mycal设置户执行权限
    PATHPATH #脚目录添加命令搜索路径(PATH)中
    mycal #输入脚名直接执行该脚
    显示: Please input month
    12
    显示: Please input year
    2013
    结果: 十二月 2013
    二 三 四 五 六 日
    1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31
    注:cal 命令显示公园1~9999年中意年意月日历果带参数显示前月份日历果参数该参数解释年份两参数时第参数表示月份第二参数表示年份两参数间应留空格年份完整形式2006写成06
    if
    testcommand

    then
    command
    Ture
    fi
    False
    图31 if…then流程图
    2.编程提示户输入两单词读入然较两单词果两单词相显示Match显示End of program果显示End of program
    方法:vi if1(进入vi环境输入列脚程序)
    echo –n word 1
    read word1
    echo –n word 2 # n表示显示完word2光标换行
    read word2
    if test word1 word2 #注意前应空格
    then echo Match
    fi
    echo End of program
    :wq回车(保存文件退出vi)
    方法二:
    cat>if1<echo –n word 1
    read word1
    echo –n word 2 # n表示显示完word2光标换行
    read word2
    if test word1 word2 #注意前应空格
    then echo Match
    fi
    echo End of program
    EOF #结束输入回shell窗口注意EOF前面空格
    EOF面必须回车符
    运行脚程序:shell脚权限设置执行然提示符直接执行(chmod命令)
    chmod a+x if1 #mycal设置户执行权限
    PATHPATH #脚目录添加命令搜索路径(PATH)中
    if1 #输入脚名直接执行该脚
    3.修改述程序编程提示户输入两单词读入然较两单词果两单词相显示Match显示Not match显示End of program
    <编程提示>请 if…then…else 控制结构
    if
    testcommand

    then
    command
    Ture
    fi
    False
    参考程序:
    cat>if2
    echo n word1
    read word1
    echo n word2
    read word2
    if [[ word1 word2 ]]
    then echo Match
    else
    echo No Match
    fi
    echo End of program
    Ctrl+D #结束输入回shell窗口
    4.编程case结构创建简单菜单屏幕显示菜单:
    a Current date and time
    b User currently logged in
    c Name of the working directory
    d Contents of the working directory
    Enter abc or d
    根户输入选项做相应操作
    参考程序:
    cat>menu1
    echo –e \n COMMAND MENU\n #面转义字符\n前面定选项e
    echo a Current date and time
    echo b User currently logged in
    echo c Name of the working directory
    echo –e d Contents of the working directory\n
    echo –n Enter abc or d
    read answer
    echo
    case answer in
    a) date
    b) who
    c) pwd
    d) ls
    *) echo There is no selection answer
    esac
    echo
    Ctrl+D #结束输入回shell窗口
    menu1 回车
    5. 修改题户连续选择直想退出时退出
    参考程序:
    while true
    do
    echo e \n COMMAND MENU\n
    echo 1 Current date and time
    echo 2 User currently logged in
    echo 3 Name of the working directory
    echo 4 Contents of the working directory
    echo e 5 Exit\n
    echo n Enter selection
    read select
    echo
    case select in
    1) date
    2) who
    3) pwd
    4) ls
    5) exit
    *) echo e There is no selection select\n
    esac
    echo
    done
    6 设计程序命令行接收数值参数计算参数
    参考程序:
    cat > sy3_6_1
    x0 #累加器变量清零
    for y in * #变量次取位置参数值然执行循环体中命令表直位置参数取完止
    do
    x`expr x + y` #计算表达式x+y计算结果赋x(累加器)
    done
    echo The sum isx
    Ctrl+D
    运行方法:
    student@ubuntu~ bash sy3_6 10 20 30运行文件时带参数

    The sum is60
    程序问题原没判断输入数合法性面增加输入数合法性检查程序
    x0
    for y in *
    do
    z`echo y | awk '^[[digit]]* { print 0 }'` #研究???
    if [ z z ] then
    echo e Invalid command line parameter y\a exit 1
    fi
    x`expr x + y`
    done
    echo The Sum is x

    四实验报告求
    1.列出调试通程序清单加注释
    2 写出程序运行步骤结果
    3.总结机调试程中遇问题解决方法感想
    实验四 shell编程实验(二)
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    综合Linux常命令vi编辑器熟练掌握shell脚编程
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    三实验容
    1 编写脚求斐波契数列前10项总
    斐波契数列指样数列:1 1 2 3 5 8 13 21 34 55 89 144
    数列第三项开始项等前两项

    参考程序:
    方法:(求前10项)
    cat>fbnq_1
    num11
    num21
    echo 费波纳奇数列前10项:
    echo n num1+num2
    sum2
    for((i1i<8i++)) #for语句算术表达式方式:for((e1e2e3))
    do
    tmp`expr num1 + num2` #注意+ 前空格
    echo n +tmp
    ((num1num2)) #let命令代表示形式:((算术表达式))
    ((num2tmp))
    sum(expr sum + tmp) #命令换种形式:(命令表)
    done
    echo sum
    Ctrl+D
    方法二:(命令行输入n值求出意项)
    cat>fbnq_2
    num11
    num21
    count1命令行第实参应1脚名应0

    echo 费波纳奇数列前count项:
    echo n num1+num2
    sum2
    for((i1ido
    tmp`expr num1 + num2`
    echo n +tmp
    num1num2 #写成num1num2什???
    num2tmp
    sum`expr sum + tmp`
    done
    echo sum
    Ctrl+D
    运行方法:
    bash fbnq_2脚名
    10第实参

    费波纳奇数列前10项:
    1+1+2+3+5+8+13+21+34+55143
    2.编写脚求数逆序
    参考程序:
    商取余法次位数十位数百位数…存放数组中输出数组中容
    echo n Pleasw enter number
    read n
    declare –a inv #显示声明数组inv声明
    echo You put number is n
    echo –n The inverted order number is
    i0
    while [ n gt 0 ]
    do
    sd(( n 10 )) #求余
    n(( n 10 )) #掉前位数剩数
    inv[i]sd #余数存放数组中
    echo –n {inv[i]} #显示数组中容(读取数组元素值般方法:{数组名[标]})
    i`expr i + 1` #标变量改变指数组位
    done
    echo #换行

    3.设计Shell程序户目录建立userdata目录目录建立5目录user1~user5设置目录权限中户权限:读文件者权限:读写执行文件者组权限:读执行(注意:删建立目录恢复原样便面学做实验)
    参考程序:
    mkdir m 754 homestudentuserdata
    i1
    temphomestudentuserdiruser
    while [ i le 5]
    do
    mkdir m 754 tempi
    let i i + 1 #((ii+1))i`expr i + 1`
    done
    注:let 命令代表示形式:((算数表达式))let i i + 1 等价 ((ii+1))

    4.Shell编程判断文件普通文件果拷贝 homestudenttest 目录命令查test目录容删test目录
    参考程序:
    mkdir –m 777 homestudenttest
    echo Input file name:
    read FILENAME
    if [ f FILENAME ]
    then
    echo The FILENAME is a regular file
    cp FILENAME homestudenttest
    ls homestudenttest
    cd test
    rm FILENAME
    cd
    ls
    else
    echo The FILENAME is not a regular file
    fi
    资料:
    a file exists
    b file exists and is a block special file
    c file exists and is a character special file
    d file exists and is a directory
    e file exists (just the same as a)
    f file exists and is a regular file
    g file exists and has its setgid(2) bit set
    G file exists and has the same group ID as this process
    k file exists and has its sticky bit set
    L file exists and is a symbolic link
    n string length is not zero
    o Named option is set on
    O file exists and is owned by the user ID of this process
    p file exists and is a first in first out (FIFO) special file or
    named pipe
    r file exists and is readable by the current process
    s file exists and has a size greater than zero
    S file exists and is a socket
    t file descriptor number fildes is open and associated with a
    terminal device
    u file exists and has its setuid(2) bit set
    w file exists and is writable by the current process
    x file exists and is executable by the current process
    z string length is zero
    5.编写脚 统计指定目录普通文件目录文件数目求wc统计命令
    参考程序:
    方法:统计前目录(目录)文件数目
    counter0
    for files in * #变量files遍历遍前文件夹
    do
    if [ f files ]
    then counter`expr counter + 1` #判断files否普通文件果counter变量值加
    elif test –d files
    then counter`expr counter + 1` #判断files否目录文件果counter变量值加
    fi
    done
    echo There are counter files in `pwd`
    方法二:统计指定目录文件数目
    echo Input directory name:
    read dirname
    cd dirname
    counter0
    for files in * #变量files遍历遍前文件夹
    do
    if [ f files ]
    then
    counter`expr counter + 1` #判断files否普通文件果counter变量值加
    elif [ d files ]
    then
    counter`expr counter + 1` #判断files否目录文件果counter变量值加
    fi
    done
    echo There are counter files in `pwd`

    6.编程实现简单计算器求 户输入表达式输入结果程序会判断户输入结果否正确出提示直 户输入q’时退出执行
    参考程序:
    #binbash

    #fileNamefirst
    #noteThis is the first title
    #functioninput an expretion and the answer I will tell you right or wrong
    # You can try it as many times as you like

    echo Hello @_@
    echo Welcom to the calculate testing
    echo You can input an expretion such as 2*2 or 3+1 and input the answer
    echo I will tell you whether you are right or wrong
    echo You can input 'q' to exit
    echo Now let's begin

    number10
    while [ number1 q ]
    do
    echo Input the first number
    read number1

    echo Input the operator type
    read type
    echo Input the second number
    read number2
    echo Input the answer
    read yourAnswer

    case type in
    +) myAnswer`expr number1 + number2`
    ) myAnswer`expr number1 number2`
    \*)myAnswer`expr number1 \* number2`
    )
    if [ number2 eq 0 ]
    then
    echo Sorry (
    echo 0 cannot be the divisor
    continue
    else
    myAnswer`expr number1 number2`
    fi

    *) echo Error
    esac

    if [ myAnswer eq yourAnswer ]
    then
    echo ) Congratulations
    echo Your are right
    echo Input 'q' to exit or try again
    else
    echo ( Sorry
    echo You are wrong
    echo The right answer is
    echo number1 type number2 myAnswer
    echo Input 'q' to exit or try again
    fi

    # echo Input the first number
    # read number1
    done
    求:请学仔细分析该程序理解中语句法写出程序分析总结
    四实验报告求
    1.列出调试通程序清单加注释
    2 写出程序运行步骤结果
    3.总结机调试程中遇问题解决方法感想
    参考资料:
    实验五 Linux开发工具()
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    1.掌握C语言编译基方法
    2.掌握gdb调试工具基法
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情
    求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    户通常实验认真书写实验报告
    三实验容步骤
    1 gcc带参数编译列helloc程序
    #include
    int main()
    { printf(Hello World\n)
    return 0}
    (1)作预处理生成helloi相应命令: gcc ­E helloc
    (2)进行编译做汇编生成汇编代码命令: gcc ­S helloc
    (3)进行汇编做连接生成目标代码命令: gcc ­c helloc
    (4)默认方式生成执行程序aout命令: gcc helloc
    (5)生成执行程序hello命令: gcc ­o hello helloc
    2.Linuxgcc生成动态库静态库
    程序1 helloh
    #ifndef HELLO_H 
    #define HELLO_H 
      void hello(const char *name) 
     #endif
    程序2:helloc
    #include  
    void hello(const char *name) { 
            printf(Hello s\n name) 
    }
    程序3:mainc
    #include helloh 
     int main()
     { hello(everyone) 
         return 0 }
    注意:时候编译helloo法通gcc –o 编译道理非常简单helloc没main函数c程序够成完整程序果gcc –o 编译连接GCC报错
    静态库动态库o文件创建必须源程序helloc通gcc先编译成o文件
    时候三种思路:
    1)  通编译源文件直接目标代码合成o文件
    2)  通创建静态链接库libmyhelloamain函数调hello函数时调静态链接库
    3)  通创建动态链接库libmyhellosomain函数调hello函数时调动态链接库
    思路:编译源文件
    命令:gcc –c helloc mainc *生成目标文件进行链接生成helloomaino*
    gcc helloo maino –o mymain *目标文件链接生成执行文件main*
    运行:mymain
    思路二:静态链接库
     helloc编译成o文件
    静态库动态库o文件创建必须源程序helloc通gcc先编译成o文件系统提示符键入命令helloo文件
    gcc c helloc
    ‚ o文件创建静态库(ar工具目标文件收集起放档文件中)
    静态库文件名命名规范lib前缀紧接着静态库名扩展名a例:创建静态库名myhello静态库文件名libmyhelloa创建静态库ar命令系统提示符键入命令创建静态库文件libmyhelloa
    ar cr c 建立档文件r文件插入档文件中
    libmyhelloa helloo
    ƒ 程序中静态库
    静态库制作完部函数呢?需公函数源程序中包含公函数原型声明然‚gcc命令生成目标文件时指明静态库名gcc会静态库中公函数连接目标文件中注意gcc会静态库名前加前缀lib然追加扩展名a静态库文件名查找静态库文件程序3mainc中包含静态库头文件helloh然程序main中直接调公函数hello面先生成目标程序hello然运行hello程序结果
    gcc o hello mainc L lmyhello
    hello
    Hello everyone

    删静态库文件试试公函数hello否真连接目标文件 hello中
    rm libmyhelloa
    rm remove regular file `libmyhelloa' y
    hello
    Hello everyone

    程序常运行静态库中公函数已连接目标文件中
    思路三动态链接库(享函数库)
    静态链接库缺点果时运行许程序库函数样存中会量拷贝库函数样会浪费珍贵存存储空间享链接库Linux避免问题
    享函数库静态函数方缀典型Linux系统标准享函数库usrliblibmso
    程序享函数库时链接阶段函数代码连接进链接函数引终函数导入存开始真正执行时函数引解析享函数库代码真正导入存中样享链接库函数许程序时享需存储次享函数库优点独立更新调函数毫影响
     helloc编译成o文件
    gcc c helloc
    ‚ o文件创建动态库文件
    系统提示符键入命令动态库文件libmyhelloso
      gcc shared fPICfPIE意思实fPIC差产生位置关代码
    fPIE执行文件产生位置关代码 fPIC享库产生位置关代码
    分割线址关代码技术种编译期 编译器实施技术
    o libmyhelloso helloo
      PIC命令行标记告诉GCC产生代码包含函数变量具体存位置引现法知道该消息代码应程序会连接段存址空间样编译出helloo建立享链接库建立享链接库需GCCshared标记
    ƒ 程序中动态库
    程序中动态库静态库完全样公函数源程序中包含公函数原型声明然gcc命令生成目标文件时指明动态库名进行编译
    gcc o hello mainc L –lmyhello
    hello
    hello error while loading shared libraries libmyhelloso cannot open shared object file No such file or directory
    错误提示找动态库文件libmyhelloso程序运行时会usrliblib等目录中查找需动态库文件找载入动态库否提示类似述错误终止程序运行种方法解决
    (1)文件 libmyhelloso复制目录usrlib中试试
    # mv libmyhelloso usrlib 
    # hello
    成功
    (2)然连接器会搜寻LD_LIBRARY_PATH指定目录环境变量设置成前目录:
    先执行:export LD_LIBRARY_PATH`pwd`
    执行:hello
    成功
    LD_LIBRARY_PATH:环境变量指示动态连接器装载动态库路径
    参考资料:
    ar命令说明:建立修改备存文件备存文件中抽取文件
    ar语法:ar[dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>][备存文件][成员文件]
    ar命令补充说明:ar您集合许文件成单备存文件备存文件中成员文件皆保原属性权限
    ar命令参数:  
    指令参数:
    d  删备存文件中成员文件
    m  变更成员文件备存文件中次序
    p  显示备存文件中成员文件容
    q  问家附加备存文件末端
    r  文件插入备存文件中
    t  显示备存文件中包含文件
    x  备存文件中取出成员文件
    选项参数:
    a<成员文件>  文件插入备存文件中指定成员文件
    b<成员文件>  文件插入备存文件中指定成员文件前
    c  建立备存文件
    f  避免长文件名兼容系统ar指令指令利参数截掉放入备存文
    件中长成员文件名称
    i<成员文件>  文件插入备存文件中指定成员文件前
    o  保留备存文件中文件日期
    s  备存文件中包含象模式利参数建立备存文件符号表
    S  产生符号表
    u  日期较新文件插入备存文件中
    v  程序执行时显示详细信息
    V  显示版信息
    参数选项前'字符没
    3 gdb调试列程序练gdb命令
    #include
    #include
    #include
      void my_print (char *string)
      {
       printf (The string is s\n string)
      }
      void my_print2 (char *string)
      {
       char *string2
       int size i
       size strlen (string)
       string2 (char *) malloc (size + 1)
       for (i 0 i < size i++)
        string2[size i] string[i]
       string2[size+1] `\0'
       printf (The string printed backward is s\n string2)
      }
    int main ()
      {
       char my_string[] hello there
       my_print (my_string)
       my_print2 (my_string)
      }
     
      面命令编译
      gcc –g greetingc o greeting
      
      程序执行时显示结果
      The string is hello there
      The string printed backward is
      
      输出第行正确 第二行印出东西期设想输出应该
      The string printed backward is ereht olleh
       某原 my_print2 函数没正常工作 gdb 问题究竟出 先键入命令
      gdb greeting
      注意 记编译 greeting 程序时调试选项开
      果输入命令时忘调试程序作参数传 gdb gdb 提示符 file 命令载入
      (gdb) file greeting
      命令载入 greeting 执行文件象 gdb 命令行里装入样
      时 gdb run 命令运行 greeting gdb 里运行结果约会象样
      (gdb) run
      Starting program homestudentgreeting
      The string is hello there
      The string printed backward is
      Program exited normally
      输出 gdb 外面运行结果样 问题 什反序印没工作 找出症结 my_print2 函数 for 语句设断点 具体做法 gdb 提示符键入 list 命令三次 列出源代码
      技巧 gdb 提示符回车健重复命令
      第次键入 list 命令输出
      1    #include
      2 #include
    3    #include
    4 void my_print (char *string)
      5   {
      6    printf (The string is s\n string)
      7    }
      8    void my_print2 (char *string)
      9   {
    char *string2
    果回车gdb次执行次list命令出列输出
      11    int size i
      12    size strlen (string)
      13    string2 (char *) malloc (size + 1)
      14    for (i 0 i < size i++)
      15     string2[size i] string[i]
      16    string2[size+1] \0'
      17    printf (The string printed backward is s\n string2)
    18   }
    19 int main ()
    20    {
    次回车列出 greeting 程序剩余部分
      21     char my_string[] hello there
      22     my_print (my_string)
      23     my_print2 (my_string)
    24 return 0
    25    }
      根列出源程序 设断点方第15行 gdb 命令行提示符键入命令设置断点
      (gdb) break 15
      gdb 作出响应
      Breakpoint 1 at 0x139 file greetingc line 15
      (gdb)
      现键入 run 命令 产生输出
      Starting program homestudentgreeting
      The string is hello there
      Breakpoint 1 my_print2 (string 0xbfffdc4 hello there) at greetingc 15
      15 string2[sizei]string[i]  
      时通设置观察点观察 string2[size i] 变量值错误样产生 做法键入
      (gdb) watch string2[size i]
      gdb 作出回应
      Watchpoint 2 string2[size i]
      
      现 next 命令步步执行 for 循环
      (gdb) next
      第次循环 gdb 告诉 string2[size i] 值 `h` gdb 显示告诉信息
      Watchpoint 2 string2[size i]
      Old value 0 `\000'
      New value 104 `h'
      my_print2(string 0xbfffdc4 hello there) at greetingc14
      14 for (i0 i  值正期 数次循环结果正确 i10 时 表达式 string2[size i] 值等 `e` size i 值等 1 字符已拷新串里
      果循环执行 会已没值分配 string2[0] 新串第字符 malloc 函数分配存时初始化空(null)字符 string2 第字符空字符 解释什印 string2 时没输出
      现找出问题出里 修正错误容易代码里写入 string2 第字符偏移量改 size 1 size string2 12 起始偏移量 0 串字符偏移量 0 偏移量 10 偏移量 11 空字符保留
    修改程序:
    #include
    #include
    #include
    void my_print(char *string)
    {
    printf(The string is s\nstring)
    }
    void my_print2(char *string)
    {
    char *string2
    int sizei
    sizestrlen(string)
    string2(char*)malloc(size + 1)
    for(i0i string2[size1i]string[i]
    string2[size]'\0'
    printf(The string printed backward is s\nstring2)
    }
    int main()
    {
    char my_string[]hello there
    my_print(my_string)
    my_print2(my_string)
    return 0
    }
    4.利gcc 编译列C 语言程序查运行结果果错gdb调试
    程序名buggingc
    #include
    double average_(int array[]int *minint *maxint num)
    {
    int i s0
    double ave
    *min*maxarray[0]
    for(i1i {
    if(array[i]>*max)*maxarray[i]
    if(array[i]<*min)*minarray[i]
    s+array[i]
    }
    aves*10num
    return ave
    }
    int main(void)
    {
    int maxmin
    int a[5]{35146}
    double aver
    averaverage_(a&min&max5)
    printf(mindmaxdaverd\nminmaxaver)
    return 0
    }
    编译该程序:
    gcc o bugging g buggingc
    运行该程序:
    bugging
    机子作出响应:
    min1max5aver2000000
    运算结果查找该程序中出现问题利gdb步骤进行:
    (1)进入 gdb装入执行文件命令:
    gdb bugging
    (2)利list 命令查程序代码命令
    List 1者l 1
    (3)继续查命令:
    回车
    (4)均值结果肯定子函数问题子函数入口处设断点命令:
    break average_
    (5)均值首先累加结果必须正确求累加方设断点命令:
    break 10
    (6)查设断点信息命令:
    info break
    (7)运行程序命令:
    run
    (8)程序会设置第断点处停止显示:
    Breakpoint 1average_(array0xbffff44cmin0xbfff468max0xbffff46c
    num5) at buggingc4
    4 int is0
    时单步运行程序命令:
    next 者 n
    (9)查minmax指针指容命令:
    p *min
    p *max
    (10)时查数组容查数组5单元容命令:
    p array[0]@5 者 p *array@5
    (11)继续运行继续运行命令:
    continue 者 c 者fg
    (12)程序会设置第二断点处停止显示:
    Breakpoint 2average_(array0xbffff44cmin0xbfff468max0xbffff46c
    num5) at buggingc13
    13 s+array[i]
    时单步运行程序查累加附程序执行情况查相关变量容找出错点

    出错点:
    array[0]没累加累加器中循环变量i初值改成0
    for(i0i(13)清设断点命令:
    clear 删程序中断点
    clear 行号 删行断点
    clear 函数名 删该函数断点
    delete b_id1 b_id2 删指定编号断点
    (14)退出gdb命令:
    quit 者 q
    五实验报告求
    1.书面形式记录操作步程包括编译调试程
    2 回答提出问题
    3.总结机调试程中遇问题解决方法感想
    实验六 Linux开发工具(二)
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    理解makefile文件学会make工具
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情
    求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    户通常实验认真书写实验报告
    三实验容步骤
    1假设程序5文件组成源代码示根步骤熟悉makefile编程
    *mainc*
    #include mytool1h
    #include mytool2h
    int main()
    {
    mytool1_print(hello mytool1)
    mytool2_print(hello mytool2)
    return 0
    }
    *mytool1c*
    #include mytool1h
    #include
    void mytool1_print(char *print_str)
    {
    printf(This is mytool1 print s print_str)
    }
    *mytool1h*
    #ifndef _MYTOOL_1_H
    #define _MYTOOL_1_H
    void mytool1_print(char *print_str)
    #endif
    *mytool2c*
    #include mytool2h
    #include
    void mytool2_print(char *print_str)
    {
    printf(This is mytool2 print s print_str)
    }
    *mytool2h*
    #ifndef _MYTOOL_2_H
    #define _MYTOOL_2_H
    void mytool2_print(char *print_str)
    #endif

    根实验求写出第Makefile:
    mainmaino mytool1o mytool2o
    gcc o main maino mytool1o mytool2o
    mainomainc mytool1h mytool2h
    gcc c mainc
    mytool1omytool1c mytool1h
    gcc c mytool1c
    mytool2omytool2c mytool2h
    gcc c mytool2c
    clean
    rm f *o
    shell提示符输入make执行显示:
    gcc c mainc
    gcc c mytool1c
    gcc c mytool2c
    gcc o main maino mytool1o mytool2o
    执行结果:
    [armlinux@lqm makefileeasy] main
    This is mytool1 print hello mytool1
    This is mytool2 print hello mytool2
    初级Makefile现Makefile进行改进
    改进:变量
    般书写Makefile时部分变量引格式:
    1 make变量(Makefile中定义者make环境变量)引(VAR)格式VAR单字符变量名字符变量名
    2 出现规命令行中shell变量(般执行命令程中时变量属Makefile变量shell变量)引shelltmp格式
    3 出现命令行中make变量样(CMDVAR) 格式引
    OBJmaino mytool1o mytool2o
    main(OBJ)
    gcc o main (OBJ)
    mainomainc mytool1h mytool2h
    gcc c mainc
    mytool1omytool1c mytool1h
    gcc c mytool1c
    mytool2omytool2c mytool2h
    gcc c mytool2c
    clean
    rm f main (OBJ)
    改进二:动推导
    make动推导makeo文件会动应c文件加赖文件中gcc -c c会推导出Makefile简化
    CC gcc
    OBJ maino mytool1o mytool2o
    main (OBJ)
    (CC) o main (OBJ)
    maino mytool1h mytool2h
    mytool1o mytool1h
    mytool2o mytool2h
    PHONY clean
    clean
    rm f main (OBJ)
    改进三:动变量(^  <  @)应
    Makefile 三非常变量分@^<代表意义分
    @目标文件
    ^赖文件
    <第赖文件
    CC gcc
    OBJ maino mytool1o mytool2o
    main (OBJ)
        (CC) o @ ^
    maino mainc mytool1h mytool2h
        (CC) c <
    mytool1o mytool1c mytool1h
        (CC) c <
    mytool2o mytool2c mytool2h
        (CC) c <
    PHONY clean
    clean
        rm f main (OBJ)
    初级知识现少减少编译时工作量细节方面东西需学中断总结断深化理解参考GNU Make手册里讲解较全面
    2 面求编制makefile程序
    示例包含float类型加法加法头函数int类型加法main函数float类型减法减法头函数int类型减法
    httpblogcsdnnetithomerarticledetails5717253

    函数
    1 #include addh   
    2 #include subh   
    3 #include    
    4 int main()  
    5 {  
    6         int x y  
    7         float a b  
    8         x5  
    9         y2  
    10         a55  
    11         b22  
    12         printf(d + d  dn x y add_int(x y))  
    13         printf(31f + 31f  31fn a b add_float(a b))  
    14         printf(d  d  dn x y sub_int(x y))  
    15         printf(31f  31f  31fn a b sub_float(a b))  
    16         return 0  
    17 }  
    加法头函数
    1 * addh *  
    2 #ifndef _ADD_H_   
    3 #define _ADD_H_   
    4 extern int add_int(int x int y)  
    5 extern float add_float(float x float y)  
    6 #endif  
    int类型加法
    1 * add_intc *  
    2 int add_int(int x int y)  
    3 {  
    4         return x+y  
    5 }  
    float类型加法
    1 * add_floatc *  
    2 float add_float(float x float y)  
    3 {  
    4         return x+y  
    5 }  
    减法头函数
    1 * subh *  
    2 #ifndef _SUB_H_   
    3 #define _SUB_H_   
    4 extern int sub_int(int x int y)  
    5 extern float sub_float(float x float y)  
    6 #endif  
    int类型减法
    1 * sub_intc *  
    2 int sub_int(int x int y)  
    3 {  
    4         return xy  
    5 }  
    float类型减法
    1 * sub_floatc *  
    2 float sub_float(float x float y)  
    3 {  
    4         return xy  
    5 }  

    文件准备变量编写makefile文件:
    Main:Maino add_into add_floato sub_into sub_floato
    gcc –o Main Maino add_into add_floato sub_into sub_floato
    MainoMainc addh subh
    gcc –c Mainc
    add_intoadd_intc addh
    gcc –c add_intc
    add_floatoadd_floatc addh
    gcc –c add_floatc
    sub_intosub_intc subh
    gcc –c sub_intc
    sub_floatosub_floatc subh
    gcc –c sub_floatc
    PHONY clean
    clean
    rm –f Main *o

    变量编写makefile文件:
    OBJ Maino add_into add_floato sub_into sub_floato
    CCgcc
    Main(OBJ)
    (CC) –o Main (OBJ)
    MainoMainc addh subh
    gcc –c Mainc
    add_intoadd_intc addh
    gcc –c add_intc
    add_floatoadd_floatc addh
    gcc –c add_floatc
    sub_intosub_intc subh
    gcc –c sub_intc
    sub_floatosub_floatc subh
    gcc –c sub_floatc
    PHONY clean
    clean
    rm –f Main (OBJ)

    动推导编写makefile文件:
    OBJ Maino add_into add_floato sub_into sub_floato
    CCgcc
    Main(OBJ)
    (CC) –o Main (OBJ)
    PHONY clean
    clean
    rm –f Main (OBJ)


    动变量编写makefile文件:
    OBJ Maino add_into add_floato sub_into sub_floato
    CCgcc
    Main(OBJ)
    (CC) –o @ ^
    MainoMainc addh subh
    gcc –c ^
    add_intoadd_intc addh
    gcc –c ^
    add_floatoadd_floatc addh
    gcc –c ^
    sub_intosub_intc subh
    gcc –c ^
    sub_floatosub_floatc subh
    gcc –c ^
    PHONY clean
    clean
    rm –f Main (OBJ)
    五实验报告求
    1.书面形式记录操作步程包括编译调试程
    2 回答提出问题
    3.总结机调试程中遇问题解决方法感想
    实验七 Linux编程实验()
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    1.理解系统调库函数异
    2.学会系统调库函数进行编程
    3.掌握常系统调库函数功应
    4 综合vi编辑器编译系统gcc调试工具gdb编程实现进程控制进程通信文件操作
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情
    求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    户通常实验认真书写实验报告
    三实验容
    1.系统调进程进行控制
    父进程首先fork()创建子进程成功创建子进程3进程发运行父进程调wait(0)等子进程结束两子进程结束时父进程调exit(0)终止观察父子进程间步程
    参考程序:
    #include
    #include
    #include
    #include
    #include
    int main()
    { int pid1pid2
    while((pid1fork())1)
    if(pid1>0) 创建子进程成功处父进程
    { while((pid2fork())1)
    if(pid2>0) 创建子进程成功处父进程
    {
    printf(parent context\n)
    printf(parent is waiting the child1 terminate\n)
    wait(0)
    printf(parent is waiting the child2 terminate\n)
    wait(0)
    printf(parent terminate\n)
    exit(0)
    }else 处子进程2
    { printf(child2 context\n)
    sleep(5)
    printf(child2 terminate\n)

    }else 处子进程1
    { printf(child1 s context\n)
    sleep(5)
    printf(child1 terminate\n)

    return 0


    2.道机制进行进程通信
    名道pipe()进行父子进程间通信父进程先pipe()系统调开名道创建子进程正确通信父进程关闭读通道子进程关闭写通道父进程道写句话子进程道读出句话完成次通信父子进程分关闭读写通道道文件消失
    参考程序:
    #include
    #include
    #include
    #include
    char parent[]A message to pipe'communication\n
    int main()
    {
    int pidchanl[2] chanl[2]存放开文件描述符chanl[0]道读端chanl[1]道写端
    char buf[100]
    pipe(chanl) 创建道
    while((pidfork())1)
    if(pid>0)父进程
    {
    close(chanl[0]) 关闭读通道
    printf(parent process sends a message to child\n)
    write(chan[1]parentsizeof(parent)) 道写信息
    close(chanl[1]) 关闭写通道
    printf(parent waits the child to terminate\n)
    wait(0)
    printf(parent process terminates\n)
    exit(0)
    }
    else 子进程
    {
    close(chanl[1]) 关闭写通道
    read(chan[0]buf100) 道中读取信息
    close(chanl[0]) 关闭读通道
    printf(The message from parent is s\nbuf)
    sleep(5)
    printf(child process terminates\n)
    }
    return 0
    }

    3.信号机制进行进程通信
    编写程序创建子进程父进程子进程发送信号然等子进程终止子进程接收信号输出状态信息终止

    参考程序:
    # include
    #include
    # include
    # include
    # include
    # include
    int wait_mark1
    void waiting()catch()
    int main()
    {
    int p1statuscpid
    while((p1fork())1)
    if(p1>0)
    {
    kill(p1SIGUSER1)
    printf(parent process killed signal to child process\n)
    cpidwait(&status)
    printf(child process d were endreturn statusd\ncpid WEXITSTATUS(status))
    exit(0)
    }
    else if(p10)
    { signal(SIGUSER1catch)
    waiting()
    printf(child process catch a signal from parent and ready to end\n)
    exit(5)
    }
    return 0
    }
    void waiting(){while(wait_mark0)}
    void catch(){wait_mark0}

    四实验报告求
    1.写出调试通程序清单加注释
    2.写出运行结果分析
    3.写出机调试程中遇问题解决办法感想总结
    实验八 Linux编程实验(二)
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    1.理解系统调库函数异
    2.学会系统调库函数进行编程
    3.掌握常系统调库函数功应
    4 综合vi编辑器编译系统gcc调试工具gdb编程实现进程控制进程通信文件操作
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情
    求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    户通常实验认真书写实验报告
    三实验容
    1.消息队列进行进程通信
    书例题76
    求:分析程序程序加注释调试运行程序写出运行结果分析









    2.父进程中创建消息队列然fork()创建子进程子进程中条消息传送消息队列父进程接受队列消息消息送屏幕显示
    参考程序:
    # include
    # include
    # include
    # include
    # define MSGKEY 75
    # define LEN 50
    struct msgform
    { long mtype
    char mtext[100]
    } msgsmsgr
    int main()
    { int msgqidpid
    printf(Please input a string)
    fgets(msgsmtextLENstdin) *键盘输入串字符*
    if(( msgqidmsgget(MSGKEY0777|IPC_CREAT))<0) *建立消息队列*
    { perror(msggetcreat)
    exit(EXIR_FAILURE)
    }
    while((pidfork())1)
    if(pid>0) *父进程*
    {
    wait(NULL) *等僵死子进程*
    printf(Parent receives the message\n )
    if((msgrcv(msgqid&msgrLEN1IPC_NOWAIT))<0) *接收队列中消息*
    { perror(msgrcv)
    exit(EXIR_FAILURE)
    }
    printf(s\nmsgrmtext) *输出消息*
    msgctl(msgqidIPC_RMID0果第二项参数IPC_STAT(获取消息队列信息)返回信息存储参数(第三参数)指msgqid_ds结构中果IPC_RMID(删队列)第三参数取0
    ) *删信息队列*
    exit(EXIT_SUCCESS)
    }
    else *子进程*
    {
    msgsmtype1
    msgsnd(msgqid&msgsLENIPC_NOWAIT ) *发送消息队列中*
    printf(Child snds the message\n)
    }
    return 0
    }

    3.系统调文件进行操作编写程序文件容复制文件实现简单copy功求:open()read()write()close()系统调程序求带参数运行第参数源文件第二参数目标文件
    参考程序:
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #define size 513
    int main(int argcchar **argv)
    {
    int fd1fd2bytes
    char buffer[size]
    if(argc<3)
    {
    fprintf(stderr标准出错文件
    usagesfile\nargv[0])
    return 1
    }

    if((fd1open(argv[1]O_RDONLY))<0) 读方式开源文件
    {
    fprintf(stderrscannot open for reads\nargv[1]strerror(errno)返回错误原描述字符串
    )
    return 1
    }
    if((fd2open(argv[2]O_WRONLY|O_CREAT|0644))<0) 写方式开目标文件果存创建
    {
    fprintf(stderrscannot open for writes\nargv[2]strerror(errno))
    return 1
    }
    while((bytesread(fd1buffersize1))size1) 循环读取文件容(块方式次512字节)
    {
    write(fd2buffersize1) 写入目标文件
    }
    if(bytes write(fd2bufferbytes)
    close(fd1)
    close(fd2)
    }
    四实验报告求
    1.写出调试通程序清单加注释
    2.写出运行结果分析
    3.写出机调试程中遇问题解决办法感想总结
    实验九 Linux系统网络理实验
    班级: 姓名: 学号: 机时间:
    课教师: 实验教师: 实验成绩:
    实验目
    1.理解系统理涵作
    2.学会户组进行般理
    3.掌握文件系统装载卸载
    4.学会网络配置般方法
    二实验注意事项
    实验室实验环境系统设施请系统做系统户安全事情
    求学登录系统家目录创建属子目录((拼音)名字学号)工作目录进行建议实验台计算机做样保持连续性
    户通常实验认真书写实验报告
    三实验容
    1.Shell命令方式新户建立帐号工作组删户组
    2.图形方式新户建立帐号工作组删户组
    3.手工挂载卸载文件系统
    4.配置网络
    四实验步骤
    ()Linux户理
    1.创建新户
    创建户帐号需完成步骤:
    ①添加记录etcpasswd文件中
    添加命令:useradd
    例创建新户user01命令:
    useradd cnormal userd homeuser01 –g users\ G studentcomputer –s binbash user01
    c normal user: normal user该户注释
    d homeuser01:指定户工作目录(宿目录)homeuser01
    –g users\:定义user01属组users
    G studentcomputer:时user01属studentcomputer组
    –sbinbash:指定户启动shellbinbash
    Linux中创建户必须户设置密码
    ②设置户密码
    例user01设置密码命令:
    passwd user01
    安全起见密码设置简单
    实际中系统根前运行情况动确定户参数
    ③创建户目录(户创建)
    例 cdhome #进入home目录
    mkdir user01 #创建user01目录
    2.删户
    删户命令:userdel例userdel user01
    户删该户宿目录然存系统会删户时删宿目录防止误操作删该目录中价值资料果确认删宿目录需rm命令手工删
    例:rmrfhomeuser01
    操作:根实例操作遍求户名起尝试带参数带部分参数情况
    (二)Linux户组理
    1.创建组
    Linux中创建组然成员添加组列表中组单位分配资源隶属组成员访问资源
    创建组命令:groupadd
    例命令groupadd group1创建名group1没成员组
    组存放etcgroup文件中组单独行列出例:Studentx527
    中第列组名字第二列密码真正密码存放etcgshadow映文件中第三列组数字索引第三列逗号隔开组成员户ID
    2.理组成员
    ①编辑etcgroup文件成员添加相应组里面
    ②gpasswd命令组中添加成员该命令中带参数a面添加户名属组名例: gpasswd –a user01 group1
    ③删组成员该命令带参数d例:gpasswd –d user01 group1
    操作:根实例操作遍求组名起
    3.删组
    ①groupdel命令删需组例:groupdel group1
    ②etcgroup文件中应组记录项删达样目
    操作求:
    ① 请写出创建新户组新户密码登录全程
    ①添加户帐号(添加记录etcpasswd文件中)
    sudo useradd –d homeuser01指定户工作目录homeuser01
    –s binbash指定户启动shellbinbash
    user01户登录名

    ②设置户密码
    sudo passwd user01
    新密码12345678
    ③ 创建户目录(户创建)
    cd home #进入home目录
    sudo mkdir user01 #创建user01目录
    ④ 创建组
    sudo groupadd group1
    ⑤ 添加新户组
    sudo gpasswd –a user01 group1
    注:sudo gpasswd –a user01 admin #新建户sudo命令
    ⑥ 改变homeuser01目录属者 user01 (见P62)
    sudo chown user01 homeuser01
    ⑦ 改变homeuser01目录属组 group1(见P62)
    sudo chgrp group1 homeuser01
    ⑧重启
    sudo reboot
    然新户名密码登录
    户名:user01
    密码:123456
    ② 请写出删新户组全程
    ①重启老户老密码登录
    户名:student
    密码:111111
    ② 删户帐号
    sudo userdel user01
    (者gpasswd命令带参数d例
    gpasswd –d user01 group1#删组group1user01成员)#面注释
    删户宿目录
    sudo rm –rf homeuser01
    删户组
    sudo groupdel group1

    (三)文件系统
    1.手工挂载文件系统
    命令格式:
    mount [t type] device dir
    中:t type:指定文件系统类型
    device:安装文件系统块设备名
    dir:安装点(目录)
    例:软驱中插入张磁盘然软驱挂载msdos文件类型
    挂载软磁盘命令:mount t msdos devfd0 mntfloppy
    挂载完成ls命令查软磁盘中包括文件
    操作求:手工挂载优盘?求写出挂载命令列出选项确定文件类型确定?文件系统分区名确定?安装点(放置新文件系统路径名)确定?
    挂载文件系统命令格式:mount –t type需安装文件系统类型
    device表示该文件系统分区名通常位目录dev中特设备文件称安装系统块设备名
    dir表示安装新文件系统路径名放置新文件系统安装点

    确定文件类型块设备名?
    1 df –T 命令查安装u盘文件类型块设备名(分区名)
    2 fdisk l命令查u盘文件系统类型块设备名查没插入u盘插入u盘出信息部分u盘信息dev名称什?system类型什?(fdisk –l命令机器)
    3 图形方式查开 系统系统理系统监视器选择 文件系统 查查没插入u盘插入u盘出信息部分u盘信息
    u盘块设备名:devsdb 文件类型:vfat
    安装点确定:Linux目录mnt常文件系统安装目录切记安装点目录定空目录文件系统安装非空目录中果样做该目录中原容会新安装文件系统容覆盖
    mkdir mntusb (创建安装点)
    mount –t vfat devsdb mntusb
    2 手工卸载文件系统
    命令格式:umount <分区名分区安装点>
    例:卸载软盘msdos文件系统
    命令:umount t msdos devfd0
    卸载完成软盘驱动器中取出软盘
    注意:正文件系统unmount命令卸载手工卸载文件系统时必须确保户程序该文件系统子目录中工作
    操作求:卸载优盘?请写出卸载命令
    umount devsdb (者: )
    注意:卸载手动删安装点:rm mntusb
    (五)网络配置:
    1 图形界面配置方法
    ① 开终端命令ifconfig查IP址子网掩码
    IP Address 19216816
    Subnet Mask:2552552550
    Default Gateway:1921681254(5501机房网关址必须址)
    记址
    ②右键点击方面板中网络图标选择编辑连接开网络连接窗口选择已连接点击删钮删原连接然点击添加钮开编辑线连接窗口点击IPV4设置方法中选择手动点击添加址栏中送入面记IP址子网掩码默认网关DNS服务器中送入域名:20210344150(汽院校园网域名)点击确定钮
    ③ 选择系统系统理网络工具查网络配置情况
    ④ 正确重新配置
    ⑤ 激活网络服务
    2 命令配置网络方法兴趣学行学完成(选作)








    五实验报告求
    1 书面形式记录操作步程包括输入输出信息
    2.总结机程中遇问题解决方法感想

    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 3 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    嵌入式实时操作系统试题

    嵌入式实时操作系统试题——(笔试、闭卷)一、判断(2×12=24分)1、嵌入式系统是看不见的计算机系统,其开发环境和运行环境一致。( F )2、PC机可包含在嵌入式系统中。( T )...

    3年前   
    1115    0

    操作系统实验心得

    操作系统实验心得  每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在...

    12年前   
    982    0

    嵌入式实验报告三

    嵌入式实验报告三一、实验目的:1.学习cygwin;2.通过上机实验,使学生验证、巩固和充实所学理论知识,加深对相关内容的理解,了解嵌入式Linux的内核布局,掌握内核配置及编译方法。二、实验...

    8个月前   
    179    0

    操作系统进程管理实验报告

    操作系统进程管理实验报告实验一 进程管理1.实验目的:(1)加深对进程概念的理解,明确进程和程序的区别;(2)进一步认识并发执行的实质;(3)分析进程争用资源的现象,学习解决进程互斥的方法;...

    1年前   
    360    0

    操作系统实验心得(精选多篇)

    操作系统实验心得(精选多篇)第一篇:操作系统实验心得每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我...

    12年前   
    575    0

    牛生产实验指导

       《牛生产实验》实验指导 适用专业:动物科学 编    者:马双青 学 时 数:22 编制时间:2011年3月 《动物生产实验》实验指导 ——牛生产实验指导 实验十二 牛体...

    11年前   
    10139    0

    ARM嵌入式教学实验系统项目合作意向书

    ARM嵌入式教学实验系统项目合作意向书  项目合作意向书  项目名称:“arm嵌入式教学实验系统”  甲方:深圳信息职业技术学院  乙方:深圳市旋极历通科技有限公司  甲乙双方经友好协商,同意...

    12年前   
    509    0

    嵌入式系统原理与设计实验报告

    嵌 入 式 系 统 实 验 报 告指导教师: 学科专业: 班 级: 学 号: 姓 名: 2014年X月前 言从20世纪七十年代单片机的出现到各式各样的嵌...

    1年前   
    302    0

    2017年实验指导教师的评语

    实验指导教师的评语  篇一  该生有较高的素质、强烈的责任心、真诚的爱心,给我们留下了深刻的印象!  篇二  **同学在实习期间,非常出色的完成了教育实习方面的工作。具体表现有以下几点:首先,...

    7年前   
    492    0

    **师院ENVI实验指导书

    ENVI使用的是通用的栅格数据格式,包含一个简单的二进制文件和一个相关的ASCII的头文件。读该文件格式允许ENVI使用几乎有的影像文件,包括那些自身嵌入头文件信息的影像文件。

    2年前   
    542    0

    编译原理实验指导书

    目 录相关问题说明 1实验题 2实验1 词法分析(2课时) 3实验2 语法分析(2课时) 5实验3 语义分析(2课时) 7实验4 代码生成(2课时) 9参考书目 11相关问题说明本课程共有4个...

    3年前   
    580    0

    采购管理实验指导书

    实验五 金算盘8e/ERP采购管理实验指导书Ⅲ实验目的:1. 熟悉采购管理的根本业务流程2. 掌握采购管理流程的根本操作3. 理解采购管理在ERP系统中的作用实验内容:1. 设置往来单位、物...

    2年前   
    450    0

    电子测量实验指导书

    电子测量实验指导书目录实验一 常用仪器的面板结构与使用 1实验二 函数信号发生器的使用 7实验三 模拟示波器的使用 10实验四 数字存储示波器的使用 13实验五 示波器测量相位差 21实验六 ...

    3年前   
    551    0

    工业工程实验指导书

    本实验的研究对象是联想电脑主机的装配过程,用流程程序表格上将整个装配生产过程记录下来,然后用“5W1H”提问技术发现问题,用“ECRS”分析原则改进加工工艺过程。

    5年前   
    1423    0

    汇编原理实验指导书

    第一部分 汇编语言程序的上机过程 1 一、 建立汇编语言的工作环境 1 二、在计算机上运行汇编语言的步骤 1 三、 建立ASM文件 1 四、 用MASM程序产生OBJ文件 3 五、 ...

    5年前   
    1102    0

    信号与系统实验指导书

    掌握用Matlab绘制波形图的方法,学会常见波形图的绘制。

    5年前   
    1912    0

    EVIEWS上机实验指导书

     计量经济学 上机指导及练习 第一部分 Eviews基础 1.1. Eviews简介 Eviews:Econometric Views(经济计量视图),是美国QMS公司(Q...

    5年前   
    2271    0

    电子测量原理实验指导书

    电子测量原理实验指导书XX大学自动化学院目 录电子测量实验系统组成原理及操作………………………… 1电子计数器原理及应用……………………………………… 10示波器原理及应用…………………...

    3年前   
    600    0

    操作系统实验报告C语言实现银行家算法

    实 验 报 告题 目名 称C语言实现银行家算法院 系信息科学与工程学院班 级完成时间指导老师本次实验成绩组长联系电话邮件地址组员(姓名,学号)主要任务程序算法的编写、实现、运行调...

    3年前   
    467    0

    驱动程序实验报告操作系统课程设计报告

    操作系统课程设计报告班级: 计科 姓名: 学号: 老师: 时间:2012年X月X日一、设计目的操作...

    1年前   
    298    0

    文档贡献者

    文***享

    贡献于2022-10-22

    下载需要 3 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档