電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>Linux下C編程基礎(chǔ)之實(shí)驗(yàn)內(nèi)容及小結(jié)

Linux下C編程基礎(chǔ)之實(shí)驗(yàn)內(nèi)容及小結(jié)

2017-10-18 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

1.實(shí)驗(yàn)?zāi)康?br />   通過指定指令的vi操作練習(xí),使讀者能夠熟練使用vi中的常見操作,并且熟悉vi的3種模式,如果讀者能夠熟練掌握實(shí)驗(yàn)內(nèi)容中所要求的內(nèi)容,則表明對(duì)vi的操作已經(jīng)很熟練了。
  2.實(shí)驗(yàn)內(nèi)容
 ?。?)在“/root”目錄下建一個(gè)名為“vi”的目錄。
  (2)進(jìn)入“vi”目錄。
 ?。?)將文件“/etc/inittab”復(fù)制到“vi”目錄下。
 ?。?)使用vi打開“vi”目錄下的inittab。
 ?。?)設(shè)定行號(hào),指出設(shè)定initdefault(類似于“id:5:initdefault”)的所在行號(hào)。
 ?。?)將光標(biāo)移到該行。
 ?。?)復(fù)制該行內(nèi)容。
 ?。?)將光標(biāo)移到最后一行行首。
 ?。?)粘貼復(fù)制行的內(nèi)容。
 ?。?0)撤消第9步的動(dòng)作。
 ?。?1)將光標(biāo)移動(dòng)到最后一行的行尾。
 ?。?2)粘貼復(fù)制行的內(nèi)容。
  (13)光標(biāo)移到“si::sysinit:/etc/rc.d/rc.sysinit”。
 ?。?4)刪除該行。
 ?。?5)存盤但不退出。
  (16)將光標(biāo)移到首行。
  (17)插入模式下輸入“Hello,this is vi world!”。
  (18)返回命令行模式。
 ?。?9)向下查找字符串“0:wait”。
 ?。?0)再向上查找字符串“halt”。
 ?。?1)強(qiáng)制退出vi,不存盤。
  分別指出每個(gè)命令處于何種模式下?
  3.實(shí)驗(yàn)步驟
  (1)mkdir /root/vi
 ?。?)cd /root/vi
  (3)cp /etc/inittab 。/
  (4)vi 。/inittab
 ?。?):set nu(底行模式)
 ?。?)17《enter》(命令行模式)
  (7)yy
 ?。?)G
  (9)p
 ?。?0)u
 ?。?1)$
 ?。?2)p
 ?。?3)21G
 ?。?4)dd
 ?。?5):w(底行模式)
 ?。?6)1G
  (17)i 并輸入“Hello,this is vi world!”(插入模式)
 ?。?8)Esc
 ?。?9)/0:wait(命令行模式)
 ?。?0)?halt
 ?。?1):q!(底行模式)
  4.實(shí)驗(yàn)結(jié)果
  該實(shí)驗(yàn)的最終結(jié)果是對(duì)“/root/inittab”增加了一行復(fù)制的內(nèi)容:“id:5:initdefault”。
  3.7.2 用gdb調(diào)試程序的bug
  1.實(shí)驗(yàn)?zāi)康?br />   通過調(diào)試一個(gè)有問題的程序,使讀者進(jìn)一步熟練使用vi操作,而且熟練掌握gcc編譯命令及gdb的調(diào)試命令,通過對(duì)有問題程序的跟蹤調(diào)試,進(jìn)一步提高發(fā)現(xiàn)問題和解決問題的能力。這是一個(gè)很小的程序,只有35行,希望讀者認(rèn)真調(diào)試。
  2.實(shí)驗(yàn)內(nèi)容
  (1)使用vi編輯器,將以下代碼輸入到名為greet.c的文件中。此代碼的原意為輸出倒序main函數(shù)中定義的字符串,但結(jié)果顯示沒有輸出。代碼如下所示:
  #include 《stdio.h》
  int display1(char *string);
  int display2(char *string);
  int main ()
  {
  char string[] = “Embedded Linux”;
  display1 (string);
  display2 (string);
  }
  int display1 (char *string)
  {
  printf (“The original string is %s \n”, string);
  }
  int display2 (char *string1)
  {
  char *string2;
  int size,i;
  size = strlen (string1);
  string2 = (char *) malloc (size + 1);
  for (i = 0; i 《 size; i++)
  {
  string2[size - i] = string1[i];
  }
  string2[size+1] = ‘ ’;
  printf(“The string afterward is %s\n”,string2);
  }
 ?。?)使用gcc編譯這段代碼,注意要加上“-g”選項(xiàng)以方便之后的調(diào)試。
 ?。?)運(yùn)行生成的可執(zhí)行文件,觀察運(yùn)行結(jié)果。
 ?。?)使用gdb調(diào)試程序,通過設(shè)置斷點(diǎn)、單步跟蹤,一步步找出錯(cuò)誤所在。
 ?。?)糾正錯(cuò)誤,更改源程序并得到正確的結(jié)果。
  3.實(shí)驗(yàn)步驟
  (1)在工作目錄上新建文件greet.c,并用vi啟動(dòng):vi greet.c。
 ?。?)在vi中輸入以上代碼。
  (3)在vi中保存并退出,使用命令“:wq”。
  (4)用gcc編譯:gcc -g greet.c -o greet。
  (5)運(yùn)行g(shù)reet,使用命令“。/greet”,輸出為:
  The original string is Embedded Linux
  The string afterward is
  可見,該程序沒有能夠倒序輸出。
 ?。?)啟動(dòng)gdb調(diào)試:gdb greet。
 ?。?)查看源代碼,使用命令“l(fā)”。
  (8)在30行(for循環(huán)處)設(shè)置斷點(diǎn),使用命令“b 30”。
  (9)在33行(printf函數(shù)處)設(shè)置斷點(diǎn),使用命令“b 33”。
 ?。?0)查看斷點(diǎn)設(shè)置情況,使用命令“info b”。
  (11)運(yùn)行代碼,使用命令“r”。
 ?。?2)單步運(yùn)行代碼,使用命令“n”。
 ?。?3)查看暫停點(diǎn)變量值,使用命令“p string2[size - i]”。
 ?。?4)繼續(xù)單步運(yùn)行代碼數(shù)次,并檢查string2[size-1]的值是否正確。
  (15)繼續(xù)程序的運(yùn)行,使用命令“c”。
 ?。?6)程序在printf前停止運(yùn)行,此時(shí)依次查看string2[0]、string2[1]…,發(fā)現(xiàn)string[0]沒有被正確賦值,而后面的賦值都是正確的,這時(shí),定位程序第31行,發(fā)現(xiàn)程序運(yùn)行結(jié)果錯(cuò)誤的原因在于“size-1”。由于i只能增到“size-1”,這樣string2[0]就永遠(yuǎn)不能被賦值而保持NULL,故不能輸出任何結(jié)果。
  (17)退出gdb,使用命令“q”。
 ?。?8)重新編輯greet.c,把其中的“string2[size - i] = string1[i]”改為“string2[size – i - 1] = string1[i];”即可。
 ?。?9)使用gcc重新編譯:gcc -g greet.c -o greet。
 ?。?0)查看運(yùn)行結(jié)果:。/greet
  The original string is Embedded Linux
  The string afterward is xuniL deddedbmE
  這時(shí),輸出結(jié)果正確。
  4.實(shí)驗(yàn)結(jié)果
  將原來有錯(cuò)的程序經(jīng)過gdb調(diào)試,找出問題所在,并修改源代碼,輸出正確的倒序顯示字符串的結(jié)果。
  3.7.3 編寫包含多文件的makefile
  1.實(shí)驗(yàn)?zāi)康?br />   通過對(duì)包含多文件的makefile的編寫,熟悉各種形式的makefile,并且進(jìn)一步加深對(duì)makefile中用戶自定義變量、自動(dòng)變量及預(yù)定義變量的理解。
  2.實(shí)驗(yàn)過程
 ?。?)用vi在同一目錄下編輯兩個(gè)簡(jiǎn)單的hello程序,如下所示:
  #hello.c
  #include “hello.h”
  int main()
  {
  printf(“Hello everyone!\n”);
  }
  #hello.h
  #include 《stdio.h》
 ?。?)仍在同一目錄下用vi編輯makefile,且不使用變量替換,用一個(gè)目標(biāo)體實(shí)現(xiàn)(即直接將hello.c和hello.h編譯成hello目標(biāo)體)。然后用make驗(yàn)證所編寫的makefile是否正確。
 ?。?)將上述makefile使用變量替換實(shí)現(xiàn)。同樣用make驗(yàn)證所編寫的makefile是否正確。
  (4)編輯另一個(gè)makefile,取名為makefile1,不使用變量替換,但用兩個(gè)目標(biāo)體實(shí)現(xiàn)(也就是首先將hello.c和hello.h編譯為hello.o,再將hello.o編譯為hello),再用make的“-f”選項(xiàng)驗(yàn)證這個(gè)makefile1的正確性。
 ?。?)將上述makefile1使用變量替換實(shí)現(xiàn)。
  3.實(shí)驗(yàn)步驟
 ?。?)用vi打開上述兩個(gè)代碼文件“hello.c”和“hello.h”。
 ?。?)在shell命令行中用gcc嘗試編譯,使用命令:“gcc hello.c –o hello”,并運(yùn)行hello可執(zhí)行文件查看結(jié)果。
  (3)刪除此次編譯的可執(zhí)行文件:rm hello。
  (4)用vi編輯makefile,如下所示:
  hello:hello.c hello.h
  gcc hello.c -o hello
 ?。?)退出保存,在shell中鍵入:make,查看結(jié)果。
  (6)再次用vi打開makefile,用變量進(jìn)行替換,如下所示:
  OBJS :=hello.o
  CC :=gcc
  hello:$(OBJS)
  $(CC) $^ -o $@
 ?。?)退出保存,在shell中鍵入make,查看結(jié)果。
  (8)用vi編輯makefile1,如下所示:
  hello:hello.o
  gcc hello.o -o hello
  hello.o:hello.c hello.h
  gcc -c hello.c -o hello.o
 ?。?)退出保存,在shell中鍵入:make -f makefile1,查看結(jié)果。
 ?。?0)再次用vi編輯makefile1,如下所示:
  OBJS1 :=hello.o
  OBJS2 :=hello.c hello.h
  CC :=gcc
  hello:$(OBJS1)
  $(CC) $^ -o $@
  $(OBJS1):$(OBJS2)
  $(CC) -c $《 -o $@
  在這里請(qǐng)注意區(qū)別“$^”和“$《”。
 ?。?1)退出保存,在shell中鍵入make -f makefile1,查看結(jié)果。
  4.實(shí)驗(yàn)結(jié)果
  各種不同形式的makefile都能正確地完成其功能。
  3.7.4 使用autotools生成包含多文件的makefile
  1.實(shí)驗(yàn)?zāi)康?br />   通過使用autotools生成包含多文件的makefile,進(jìn)一步掌握autotools的使用方法。同時(shí),掌握Linux下安裝軟件的常用方法。
  2.實(shí)驗(yàn)過程
 ?。?)在原目錄下新建文件夾auto。
 ?。?)將上例的兩個(gè)代碼文件“hello.c”和“hello.h”復(fù)制到該目錄下。
 ?。?)使用autoscan生成configure.scan。
 ?。?)編輯configure.scan,修改相關(guān)內(nèi)容,并將其重命名為configure.in。
  (5)使用aclocal生成aclocal.m4。
  (6)使用autoconf生成configure。
  (7)使用autoheader生成config.h.in。
 ?。?)編輯makefile.am。
 ?。?)使用automake生成makefile.in。
 ?。?0)使用configure生成makefile。
 ?。?1)使用make生成hello可執(zhí)行文件,并在當(dāng)前目錄下運(yùn)行hello查看結(jié)果。
 ?。?2)使用make install將hello安裝到系統(tǒng)目錄下,并運(yùn)行,查看結(jié)果。
 ?。?3)使用make dist生成hello壓縮包。
 ?。?4)解壓hello壓縮包。
 ?。?5)進(jìn)入解壓目錄。
 ?。?6)在該目錄下安裝hello軟件。
  3.實(shí)驗(yàn)步驟
 ?。?)mkdir 。/auto。
 ?。?)cp hello.* 。/auto(假定原先在“hello.c”文件目錄下)。
  (3)命令:autoscan。
  (4)使用vi編輯configure.scan為:
  # -*- Autoconf -*-
  # Process this file with autoconf to produce a configure script.
  AC_PREREQ(2.59)
  AC_INIT(hello, 1.0)
  AM_INIT_AUTOMAKE(hello,1.0)
  AC_CONFIG_SRCDIR([hello.h])
  AC_CONFIG_HEADER([config.h])
  # Checks for programs.
  AC_PROG_CC
  # Checks for libraries.
  # Checks for header files.
  # Checks for typedefs, structures, and compiler characteristics.
  # Checks for library functions.
  AC_OUTPUT(makefile)
  (5)保存退出,并重命名為configure.in。
  (6)運(yùn)行:aclocal。
 ?。?)運(yùn)行:autoconf,并用ls查看是否生成了configure可執(zhí)行文件。
 ?。?)運(yùn)行:autoheader。
  (9)用vi編輯makefile.am文件為:
  AUTOMAKE_OPTIONS=foreign
  bin_PROGRAMS=hello
  hello_SOURCES=hello.c hello.h
 ?。?0)運(yùn)行:automake,然后運(yùn)行automake –a。
 ?。?1)運(yùn)行:。/configure。
 ?。?2)運(yùn)行:make。
 ?。?3)運(yùn)行:。/hello,查看結(jié)果是否正確。
 ?。?4)運(yùn)行:make install。
 ?。?5)運(yùn)行:hello,查看結(jié)果是否正確。
 ?。?6)運(yùn)行:make dist。
 ?。?7)在當(dāng)前目錄下解壓hello-1.0.tar.gz:tar –zxvf hello-1.0.tar.gz。
 ?。?8)進(jìn)入解壓目錄:cd 。/hello-1.0。
 ?。?9)下面開始Linux下常見的安裝軟件步驟:。/configure。
 ?。?0)運(yùn)行:make。
 ?。?1)運(yùn)行:。/hello(在正常安裝時(shí)這一步可省略)。
 ?。?2)運(yùn)行:make install。
 ?。?3)運(yùn)行:hello,查看結(jié)果是否正確。
  4.實(shí)驗(yàn)結(jié)果
  能夠正確使用autotools生成makefile,并且能夠成功安裝短小的hello軟件。
?
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1TC358743XBG評(píng)估板參考手冊(cè)
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開關(guān)電源基礎(chǔ)知識(shí)
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)