嵌入式linux實(shí)驗(yàn)報(bào)告(共22頁(yè))_第1頁(yè)
嵌入式linux實(shí)驗(yàn)報(bào)告(共22頁(yè))_第2頁(yè)
嵌入式linux實(shí)驗(yàn)報(bào)告(共22頁(yè))_第3頁(yè)
嵌入式linux實(shí)驗(yàn)報(bào)告(共22頁(yè))_第4頁(yè)
嵌入式linux實(shí)驗(yàn)報(bào)告(共22頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上嵌入式操作系統(tǒng)Linux實(shí)驗(yàn)報(bào)告專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):學(xué)號(hào):姓名:武易組員:朱清宇實(shí)驗(yàn)一 Linux下進(jìn)程的創(chuàng)建一 實(shí)驗(yàn)?zāi)康?.掌握Linux下進(jìn)程的創(chuàng)建及退出操作2.了解fork、execl、wait、waitpid及之間的關(guān)系二 實(shí)驗(yàn)內(nèi)容創(chuàng)建進(jìn)程,利用fork函數(shù)創(chuàng)建子進(jìn)程,使其調(diào)用execl函數(shù),退出進(jìn)程后調(diào)用wait或waitpid清理進(jìn)程。三 實(shí)驗(yàn)過(guò)程1.進(jìn)程的創(chuàng)建許多進(jìn)程可以并發(fā)的運(yùn)行同一程序,這些進(jìn)程共享內(nèi)存中程序正文的單一副本,但每個(gè)進(jìn)程有自己的單獨(dú)的數(shù)據(jù)和堆棧區(qū)。一個(gè)進(jìn)程可以在任何時(shí)刻可以執(zhí)行新的程序,并且在它的生命周期中可以運(yùn)行幾個(gè)程序;又如

2、,只要用戶輸入一條命令,shell進(jìn)程就創(chuàng)建一個(gè)新進(jìn)程。fork函數(shù)用于在進(jìn)程中創(chuàng)建一個(gè)新進(jìn)程,新進(jìn)程是子進(jìn)程。原型如下:#include<sys/types.h>  /* 提供類型pid_t的定義 */#include<unistd.h>  /* 提供函數(shù)的定義 */pid_t fork(void);使用fork函數(shù)得到的子進(jìn)程是父進(jìn)程的一個(gè)復(fù)制品,它從父進(jìn)程處繼承了整個(gè)進(jìn)程的地址空間fork系統(tǒng)調(diào)用為父子進(jìn)程返回不同的值, fork調(diào)用的一個(gè)奇妙之處就是它僅僅被調(diào)用一次,卻能夠返回兩次,它可能有三

3、種不同的返回值:ü 在父進(jìn)程中,fork返回新創(chuàng)建子進(jìn)程的進(jìn)程ID;ü 在子進(jìn)程中,fork返回0; ü 如果出現(xiàn)錯(cuò)誤,fork返回一個(gè)負(fù)值;用fork創(chuàng)建子進(jìn)程后執(zhí)行的是和父進(jìn)程相同的程序,子進(jìn)程可以通過(guò)調(diào)用exec函數(shù)以執(zhí)行另一個(gè)程序。當(dāng)進(jìn)程調(diào)用一種exec函數(shù)時(shí),該進(jìn)程的用戶空間代碼和數(shù)據(jù)完全被新程序替換,從新程序的啟動(dòng)例程(例如其m a i n函數(shù))開(kāi)始執(zhí)行。調(diào)用e x e c并不創(chuàng)建新進(jìn)程,進(jìn)程I D并未改變,只是用另一個(gè)新程序替換了當(dāng)前進(jìn)程的正文、數(shù)據(jù)、堆和棧段。e x e c函數(shù)原型execl,execlp,execle,execv,exe

4、cve和execvp2.進(jìn)程的退出一個(gè)進(jìn)程正常終止有三種方式:由main()函數(shù)返回;調(diào)用exit()函數(shù);調(diào)用_exit()或_Exit()函數(shù)。 #include <stdlib.h> #include <unistd.h> exit:void exit(int status) _exit:void _exit(int status)3.wait和waitpid一個(gè)進(jìn)程調(diào)用了exit之后,該進(jìn)程 并非馬上就消失掉,而是留下一個(gè)稱為僵尸進(jìn)程(Zombie)的數(shù)據(jù)結(jié)構(gòu)。在Linux進(jìn)程的5種狀態(tài)中,僵尸進(jìn)程是非常特殊的一種,它已經(jīng)放棄了幾乎所 有內(nèi)存空間,沒(méi)有任何可執(zhí)行

5、代碼,也不能被調(diào)度,僅僅在進(jìn)程列表中保留一個(gè)位置,記載該進(jìn)程的退出狀態(tài)等信息供其他進(jìn)程收集。如果一個(gè)進(jìn)程已經(jīng)終止,但是它的父進(jìn)程尚未調(diào)用wait或waitpid對(duì)它進(jìn)行清理,這時(shí)的進(jìn)程狀態(tài)稱為僵尸(Zombie)進(jìn)程。該類進(jìn)程保留了一定的信息(包括pID,退出狀態(tài),運(yùn)行時(shí)間等),需要父進(jìn)程通過(guò)wait / waitpid來(lái)取時(shí)才釋放。如果父進(jìn)程不調(diào)用wait / waitpid的話,那么保留的那段信息就不會(huì)釋放,其進(jìn)程號(hào)就會(huì)一直被占用,如果系統(tǒng)大量的產(chǎn)生僵死進(jìn)程,將因?yàn)闆](méi)有可用的進(jìn)程號(hào)而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程。父進(jìn)程通過(guò)wait和waitpid等函數(shù)等待子進(jìn)程結(jié)束,這會(huì)導(dǎo)致父進(jìn)程掛起。也可以

6、殺死父進(jìn)程,則Zombie子進(jìn)程會(huì)自動(dòng)由init進(jìn)程托管(init會(huì)負(fù)責(zé)清理)。四 實(shí)驗(yàn)代碼#include<stdio.h>int main()int i;for(i = 3;i > 0;i-)printf("This is the childn");sleep(2);return 0;#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>int main()pi

7、d_t pid,pid_w;pid = fork();if(pid < 0)perror("fork failed");exit(1);if(pid = 0)execl("./chpro","chpro",NULL);elsedopid_w = waitpid(pid,NULL,WNOHANG);if(pid_w = 0)printf("child process has no exitedn");sleep(1);while(pid_w=0);if(pid_w=pid)printf("Get ch

8、ild %dn",pid_w);elseprintf("some error occured.n");return 0;五 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)二 Linux下shell程序設(shè)計(jì)一 實(shí)驗(yàn)?zāi)康恼莆誏inux下shell程序的設(shè)計(jì)方法,腳本文件的編寫方法二 實(shí)驗(yàn)內(nèi)容1.給shell腳本加注釋,說(shuō)明其功能2.編寫一個(gè)安裝腳本文件,將某個(gè)已知的程序安裝在/myprogram下三 實(shí)驗(yàn)代碼注釋shell#定義兩個(gè)變量PREFIX=uptechTARGETDIR=/arm2410sclear# make needed directoryif -f $TARGETDIR/img/zIm

9、age ; then echo "The target dir is already exist! " echo "Please backup your files or change to another directory"exitfimkdir $TARGETDIR 2>/dev/null#初始化arm4l的開(kāi)發(fā)工具inst_armv4l_gcc()echo "install armv4l-unknown-linux-gcc-2.95.2 and libraray ."#解包tar -xjf armv4l-tools-2.

10、95.2.tar.bz2 -C / #安裝linux系統(tǒng)及文件系統(tǒng)inst_linux()echo "install linux-2.4."tar -xjf $PREFIX-kernel.tar.bz2 -C $TARGETDIR | exit echo "install busybox-1.00-pre10."tar -xjf $PREFIX-busybox-1.00-pre10.tar.bz2 -C $TARGETDIR | exit echo "install rootfs."tar -xjf $PREFIX-root.tar.

11、bz2 -C $TARGETDIR | exit #gdb調(diào)試器初始化inst_gdb()echo "install gdb & gdbserver for arm920t."cp -arf gdb $TARGETDIR | exittar -xjf gdb/insight-6.0.tar.bz2 -C $TARGETDIR | exit 配置exp文件inst_exp()echo "install examples programs."cp -arf exp $TARGETDIR | exitcp -arf doc $TARGETDIR | e

12、xit#初始化GUI程序inst_gui()echo "install gui programs"cp -raf microwindows $TARGETDIR | exitmkdir $TARGETDIR/minigui 2>/dev/nulltar -jxf minigui/basic.tar.bz2 -C $TARGETDIR/miniguitar -jxf minigui/lib.tar.bz2 -C $TARGETDIR/miniguitar -jxf minigui/mde-1.6.0.tar.bz2 -C $TARGETDIR/miniguitar -j

13、xf minigui/mg-samples-1.6.0.tar.bz2 -C $TARGETDIR/miniguitar -jxf minigui/res-host.tar.bz2 -C $TARGETDIR/miniguitar -jxf minigui/res-target.tar.bz2 -C $TARGETDIR/minigui#初始化配置文件inst_config_file()#if -f /root/.bash_profile ; then #如果/root/.bash_profile文件存在#echo "backup old .bash_profile to .bash

14、_profile_bak" #cp -f /root/.bash_profile /root/.bash_profile.bak#fi#echo "copy .bash_profile to /root"#cp -af .bash_profile /root/.bash_profile if -f /etc/minirc.dfl ; then#如果/etc/minirc.dfl文件存在echo "backup /etc/minirc.df1."cp -f /etc/minirc.dfl /etc/minirc.dfl.bakfiecho &qu

15、ot;copy minirc.df1 to /etc"cp -af minirc.dfl /etc/minirc.dfl#.cd armv4l-tools | exitinst_armv4l_gcccd .cd develop | exitinst_linuxinst_config_filecd .cp -arf sh $TARGETDIR cp -arf img $TARGETDIR mkdir $TARGETDIR/demoscd imgtar jxf yaffs.tar.bz2 -C $TARGETDIR/demos/ 2>/dev/nullcd .inst_gdbins

16、t_expcd guiinst_guicd .cd $TARGETDIR echo arm-linux develop enviroment for UP-Netarm2410 install completed!Mysql-5.5.50-linux2.6-x86_64.tar.gz的安裝:#!/bin/bashMYSQL_HOME=/myprogram/mysql# 將你的mysql安裝程序解壓后的文件名設(shè)置為MYSQL_DIR,將安裝程序(mysql-xxx.tar.gz)放到當(dāng)前目錄MYSQL_DIR=mysql-5.5.50-linux2.6-x86_64MYSQL_DIR_OLD=$

17、PWD/$MYSQL_DIRMYSQL_DIR_NEW=/myprogram/$MYSQL_DIRMYSQL_SOURCE=$MYSQL_DIR_OLD.tar.gzif ! -f $MYSQL_SOURCE then echo "MySQL package not found!" exit 1fiid mysql > /dev/null 2>&1if $? -eq 1 then # If user mysql does not exist, # delete group mysql fisrt if exists sed -i '/mysql/

18、d' /etc/group echo "Add group mysql" groupadd mysql echo "Add user mysql" useradd -g mysql mysqlfiecho "Unzip MySQL-5.5.50"tar zxvf $MYSQL_SOURCE> /dev/null 2>&1echo "Move MySQL to the right place"mv $MYSQL_DIR_OLD $MYSQL_DIR_NEWecho "Create

19、 mysql linkage"ln -s $MYSQL_DIR_NEW $MYSQL_HOMEecho "Change mysql directory to the right user and group"cd $MYSQL_HOMEchown -R mysql .cd $MYSQL_HOME chgrp -R mysql .echo "Create mysql system database"$MYSQL_HOME/scripts/mysql_install_db -user=mysql > /dev/nullcd $MYSQL_HO

20、MEchown -R mysql datacd $MYSQL_HOMEchown -R root .echo "Set environment PATH"sed -i '/export PATH=/myprogram/mysql/bin:$PATH/d' /etc/profileecho 'export PATH=/myprogram/mysql/bin:$PATH' >> /etc/profile. /etc/profileecho "Set mysql as system service"cp $MYSQL

21、_HOME/support-files/mysql.server /etc/init.d/mysqlsysv-rc-conf mysql on/etc/init.d/mysql startecho -n "Please input password of mysql user root: "stty -echoread ROOT_PASSWORDstty echoechoif -z $ROOT_PASSWORD then echo "ERROR: The password is null!" exit 1fimysqladmin -uroot passw

22、ord "$ROOT_PASSWORD"mysql -uroot -p$ROOT_PASSWORD -e"grant all on *.* to rootlocalhost identified by '$ROOT_PASSWORD'"if $? -eq 0 then echo "Set mysql user root password successfully!"fi四 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)三 Linux下多線程程序設(shè)計(jì)一 實(shí)驗(yàn)?zāi)康牧私舛嗑€程程序設(shè)計(jì)的基本原理。學(xué)習(xí) pthread 庫(kù)函數(shù)的使用。二 實(shí)驗(yàn)內(nèi)容讀懂 pthre

23、ad.c 的源代碼,熟悉幾個(gè)重要的 PTHREAD 庫(kù)函數(shù)的使用。掌握共享鎖和信 號(hào)量的使用方法。 進(jìn)入/arm2410cl/exp/basic/02_pthread 目錄,運(yùn)行 make 產(chǎn)生 pthread 程序,使用 NFS 方式連接開(kāi)發(fā)主機(jī)進(jìn)行運(yùn)行實(shí)驗(yàn)。三 實(shí)驗(yàn)過(guò)程1.多線程程序的優(yōu)缺點(diǎn)多線程程序作為一種多任務(wù)、并發(fā)的工作方式,有以下的優(yōu)點(diǎn): 1) 提高應(yīng)用程序響應(yīng)。這對(duì)圖形界面的程序尤其有意義,當(dāng)一個(gè)操作耗時(shí)很長(zhǎng)時(shí),整 個(gè)系統(tǒng)都會(huì)等待這個(gè)操作,此時(shí)程序不會(huì)響應(yīng)鍵盤、鼠標(biāo)、菜單的操作,而使用多線程技 術(shù),將耗時(shí)長(zhǎng)的操作(time consuming)置于一個(gè)新的線程,可以避免這種尷尬的

24、情況。 2) 使多 CPU 系統(tǒng)更加有效。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于 CPU 數(shù)目時(shí),不同的線程 運(yùn)行于不同的 CPU 上。 3) 改善程序結(jié)構(gòu)。一個(gè)既長(zhǎng)又復(fù)雜的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半 獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。 LIBC 中的 pthread 庫(kù)提供了大量的 API 函數(shù),為用戶編寫應(yīng)用程序提供支持。 2實(shí)驗(yàn)源代碼與結(jié)構(gòu)流程圖 本實(shí)驗(yàn)為著名的生產(chǎn)者消費(fèi)者問(wèn)題模型的實(shí)現(xiàn),主程序中分別啟動(dòng)生產(chǎn)者線程和消 費(fèi)者線程。生產(chǎn)者線程不斷順序地將 0 到 1000 的數(shù)字寫入共享的循環(huán)緩沖區(qū),同時(shí)消費(fèi)者 線程不斷地從共享的循環(huán)緩沖區(qū)讀取數(shù)據(jù)。流程圖如圖所示: 1、閱

25、讀源代碼及編譯應(yīng)用程序 進(jìn)入 exp/basic/02_pthread 目錄,使用 vi 編輯器或其他編輯器閱讀理解源代碼。運(yùn) 行 make 產(chǎn)生 pthread 可執(zhí)行文件,如圖所示。2、下載和調(diào)試運(yùn)行可執(zhí)行程序,觀察運(yùn)行結(jié)果的正確性。四 實(shí)驗(yàn)代碼#include <stdio.h>#include <stdlib.h>#include <time.h>/#include <conio.h>#include "pthread.h"#define BUFFER_SIZE 16/* 設(shè)置一個(gè)整數(shù)的圓形緩沖區(qū) */struct p

26、rodcons /* 緩沖區(qū)數(shù)組 */int bufferBUFFER_SIZE;pthread_mutex_t lock; /* 互斥鎖 */int readpos, writepos; /* 讀寫的位置*/* 緩沖區(qū)非空信號(hào) */pthread_cond_t notempty;/*緩沖區(qū)非滿信號(hào) */pthread_cond_t notfull;/*-*/*初始化緩沖區(qū)*/void init(struct prodcons * b)pthread_mutex_init(&b->lock, NULL);pthread_cond_init(&b->notempty,

27、 NULL);pthread_cond_init(&b->notfull, NULL);b->readpos = 0;b->writepos = 0;/*-*/* 向緩沖區(qū)中寫入一個(gè)整數(shù)*/void put(struct prodcons * b, int data)pthread_mutex_lock(&b->lock);/*等待緩沖區(qū)非滿*/while (b->writepos + 1) % BUFFER_SIZE = b->readpos) printf("wait for not fulln");pthread_c

28、ond_wait(&b->notfull, &b->lock);/*寫數(shù)據(jù)并且指針前移*/b->bufferb->writepos = data;b->writepos+;if (b->writepos >= BUFFER_SIZE) b->writepos = 0;/*設(shè)置緩沖區(qū)非空信號(hào)*/pthread_cond_signal(&b->notempty);pthread_mutex_unlock(&b->lock);/*-*/*從緩沖區(qū)中讀出一個(gè)整數(shù) */int get(struct prodcon

29、s * b)int data;pthread_mutex_lock(&b->lock);/* 等待緩沖區(qū)非空*/while (b->writepos = b->readpos) printf("wait for not emptyn");pthread_cond_wait(&b->notempty, &b->lock);/* 讀數(shù)據(jù)并且指針前移 */data = b->bufferb->readpos;b->readpos+;if (b->readpos >= BUFFER_SIZE) b-

30、>readpos = 0;/* 設(shè)置緩沖區(qū)非滿信號(hào)*/pthread_cond_signal(&b->notfull);pthread_mutex_unlock(&b->lock);return data;/*-*/#define OVER (-1)#define ENDMINITERM 27/* ESC to quit miniterm */struct prodcons buffer;int stop = 0;int end = 0;/*-*/void * producer(void * data)int n;for (n = 0; n < 1000

31、; n+) if(stop)break;printf(" put->%dn", n);put(&buffer, n);sleep(1);put(&buffer, OVER);printf("producer stopped!n");end = 1;return NULL;/*-*/void * consumer(void * data)int d;while (1) if(stop)break;d = get(&buffer);if (d = OVER ) break;printf("%d->getn&quo

32、t;, d);sleep(1);printf("consumer stopped!n");end = 1;return NULL;/*-*/void* keyboard(void * data)int c;while(1)if(end)break;c=getchar();if(c = 27)stop = 1;break;return NULL;/*-*/int main(void)pthread_t th_a, th_b, th_c;void * retval;init(&buffer);pthread_create(&th_a, NULL, produce

33、r, 0);pthread_create(&th_b, NULL, consumer, 0);pthread_create(&th_c, NULL, keyboard, 0);pthread_join(th_c, &retval);pthread_join(th_a, &retval);pthread_join(th_b, &retval);return 0;五 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)四 Linux下串口通信一 實(shí)驗(yàn)?zāi)康?.了解在 linux 環(huán)境下串行程序設(shè)計(jì)的基本方法。 ¾ 掌握終端的主要屬性及設(shè)置方法,熟悉終端 I /O 函數(shù)的使用。2.學(xué)習(xí)使用多

34、線程來(lái)完成串口的收發(fā)處理。二 實(shí)驗(yàn)內(nèi)容讀懂程序源代碼, 學(xué)習(xí)終端 I/O 函數(shù)的使用方法,學(xué)習(xí)將多線程編程應(yīng)用到串口的接 收和發(fā)送程序設(shè)計(jì)中。三 實(shí)驗(yàn)過(guò)程異步串行 I /O 方式是將傳輸數(shù)據(jù)的每個(gè)字符一位接一位(例如先低位、后高位)地傳送。 數(shù)據(jù)的各不同位可以分時(shí)使用同一傳輸通道,因此串行 IO 可以減少信號(hào)連線,少用一對(duì)線即可進(jìn)行。接收方對(duì)于同一根線上一連串的數(shù)字信號(hào),首先要分割成位,再按位組成 字符。為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中大量使用異步串行 IO 方式,雙方使用各自的時(shí)鐘信號(hào),而且允許時(shí)鐘頻率有一定誤差,因此實(shí)現(xiàn)較容易。但是由于每個(gè)字符都要獨(dú)立確定起始和結(jié)束(即

35、每個(gè)字符都要重新同步),字符和字符間還可能有長(zhǎng)度不定的空閑時(shí)間,因此效率較低。 圖 2.3.1 給出異步串行通信中一個(gè)字符的傳送格式。開(kāi)始前,線路處于空閑狀態(tài),送 出連續(xù)“1”。傳送開(kāi)始時(shí)首先發(fā)一個(gè)“”作為起始位,然后出現(xiàn)在通信線上的是字符的 二進(jìn)制編碼數(shù)據(jù)。每個(gè)字符的數(shù)據(jù)位長(zhǎng)可以約定為 5 位、6 位、7 位或 8 位,一般采用 ASCII 編碼。后面是奇偶校驗(yàn)位,根據(jù)約定,用奇偶校驗(yàn)位將所傳字符中為“1”的位數(shù)湊成奇數(shù) 個(gè)或偶數(shù)個(gè)。也可以約定不要奇偶校驗(yàn),這樣就取消奇偶校驗(yàn)位。后是表示停止位的“1” 信號(hào),這個(gè)停止位可以約定持續(xù) 1 位、1.5 位或 2 位的時(shí)間寬度。至此一個(gè)字符傳送完畢

36、, 線路又進(jìn)入空閑,持續(xù)為“1”。經(jīng)過(guò)一段隨機(jī)的時(shí)間后,下一個(gè)字符開(kāi)始傳送才又發(fā)出起 始位。每一個(gè)數(shù)據(jù)位的寬度等于傳送波特率的倒數(shù)。微機(jī)異步串行通信中,常用的波特率 為 50,95,110,150,300,600,1200,2400,4800,9600 等。 接收方按約定的格式接收數(shù)據(jù),并進(jìn)行檢查,可以查出以下三種錯(cuò)誤: z 奇偶錯(cuò):在約定奇偶檢查的情況下,接收到的字符奇偶狀態(tài)和約定不符。 z 幀格式錯(cuò):一個(gè)字符從起始位到停止位的總位數(shù)不對(duì)。 z 溢出錯(cuò):若先接收的字符尚未被微機(jī)讀取,后面的字符又傳送過(guò)來(lái),則產(chǎn)生溢出錯(cuò)。 每一種錯(cuò)誤都會(huì)給出相應(yīng)的出錯(cuò)信息,提示用戶處理。一般串口調(diào)試都使用空的

37、MODEM 連接電纜,其連接方式如圖所示。 Linux 操作系統(tǒng)從一開(kāi)始就對(duì)串行口提供了很好的支持,為進(jìn)行串行通訊提供了大量 的函數(shù),我們的實(shí)驗(yàn)主要是為掌握在 Linux 中進(jìn)行串行通訊編程的基本方法。本實(shí)驗(yàn)的程 序流程圖如圖所示。四 實(shí)驗(yàn)代碼#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#define BAUDRATE B#defin

38、e COM1 "/dev/ttyUSB0"#define COM2 "/dev/ttyS1"#define ENDMINITERM 27#define FALSE 0#define TRUE 1volatile int STOP=FALSE;volatile int fd;void child_handler(int s)printf("stop!n");STOP=TRUE;/*-*/void* keyboard(void * data)int c;for (;)c=getchar();if( c= ENDMINITERM)STOP=

39、TRUE;break ;return NULL;/*-*/* modem input handler */void* receive(void * data)int c;printf("read modemn");while (STOP=FALSE)read(fd,&c,1); /* com port */write(1,&c,1); /* stdout */printf("exit from reading modemn");return NULL;/*-*/void* send(void * data)int c='0'printf("send datan");while (STOP=FALSE) /* modem input handler */c+;c

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論