電商專業(yè)學(xué)習(xí)嵌入式軟件開(kāi)發(fā)第五十三天

  • 網(wǎng)絡(luò)編程第四天

今天只講了一個(gè)知識(shí)點(diǎn)——select撞蜂。然后就讓我們繼續(xù)做項(xiàng)目,經(jīng)過(guò)不斷的努力,第一階段項(xiàng)目的基本程序已經(jīng)能夠運(yùn)行了,就是會(huì)出現(xiàn)最讓人頭疼的段錯(cuò)誤,只能用今晚到明天下午的這段時(shí)間慢慢更改了疚膊。明天晚上還要進(jìn)行階段考試,考網(wǎng)絡(luò)編程和系統(tǒng)編程的內(nèi)容,希望能夠及格埋合。

一创淡、select:多路復(fù)用

  1. 得出所有描述符里最大的描述符
  2. 將所要監(jiān)控的描述符添加對(duì)應(yīng)集合里
  3. 調(diào)用select
fd_set rfds;
struct timeval tm = {0};
while(1)
{
    求最大描述符;(maxfd)
    FD_ZERO(&rfds);../../../inc/public.h
    FD_SET(fd1,&rfds);
    //...FD_SET()
    tm.tv_sec = 10;    
    ret = select(maxfd+1,&rfds,NULL,NULL,&tm);
    if(ret < 0)
    {//出錯(cuò)
      if(errno != EINTR) // 錯(cuò)誤是由于信號(hào)引起
      {
    break;
      }
    }
    else if(ret == 0)
    {//設(shè)定的超時(shí)時(shí)間到了另绩。此時(shí)timeout參數(shù)不可為NULL
    }
    else
    {//ret > 0 此時(shí)表示有多少個(gè)描述符有數(shù)據(jù)可操作
      if(FD_ISSET(fd1, &rfds))
      {//讀數(shù)據(jù)
    ............
      }
      if(FD_ISSET(fd2, &rfds))
      {//讀數(shù)據(jù)
    .............
      }
    }
}

二儒陨、由源代碼生成的文件

  1. 可執(zhí)行文件
  2. 庫(kù)文件
    a. 靜態(tài)庫(kù)([win].lib  [linux].a)
    b. 動(dòng)態(tài)庫(kù)([win].dll [linux].so)
  1. 生成可執(zhí)行文件的過(guò)程
         預(yù)處理      編譯       匯編                       鏈接
a.c      a.i          a.S         a.o            
b.c     b.i           b.S         b.o
.......                                                              可執(zhí)行文件
c.c      c.i          c.S          c.o
d.c     d.i           d.S         d.o
                                libc.a
預(yù)處理:處理#開(kāi)頭的命令
             #define / #include  :傻替換
         #ifdef / #ifndef / #if : 條件編譯
編譯:將C語(yǔ)言語(yǔ)句翻譯成匯編語(yǔ)言(.S)
匯編:將匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言(.o)
鏈接:將所有的.o文件和所用到的庫(kù)文件打包生成可執(zhí)行文件
      采用動(dòng)態(tài)庫(kù)文件:動(dòng)態(tài)鏈接:將動(dòng)態(tài)庫(kù)文件中很少的一些內(nèi)容和所有.o進(jìn)行組合
      采用靜態(tài)庫(kù)文件:靜態(tài)鏈接:將整個(gè)靜態(tài)庫(kù)文件和所有.o進(jìn)行組合
  1. linux下生成庫(kù)文件的方式
    靜態(tài)庫(kù): ar命令
    動(dòng)態(tài)庫(kù):gcc a.c b.c -o libxyz.so -fPIC -shared -Wall
  1. 如何使用動(dòng)態(tài)庫(kù)文件
    a. 編譯的時(shí)候: -lxyz -L目錄
    b. 第一次可執(zhí)行文件被執(zhí)行前:
          1) 確認(rèn)庫(kù)文件在哪個(gè)目錄下
          2)將目錄的路徑設(shè)置到/etc/ld.so.conf文件中
          3)執(zhí)行命令sodu ldconfig
    c. 運(yùn)行可執(zhí)行文件

三、Makefile

  1. 為什么要用Makefile
  解決:a. 編譯命令過(guò)長(zhǎng)
        b. 節(jié)省編譯時(shí)間
          ```                                      
2. Makefile可以看成是一個(gè)解釋型的編程語(yǔ)言所寫(xiě)源代碼
    make命令就是這種源代碼解釋器
    
3. Makefile文件的主體結(jié)構(gòu)—由規(guī)則組成
    一個(gè)規(guī)則的組成:
目標(biāo):依賴列表
[Tab]命令1
[Tab]命令2
.......
[Tab]命令n
4. Makefile模板:(見(jiàn)Lanchat源碼目錄)
a. 變量?jī)?nèi)容要求在同一行(如果想多行寫(xiě)笋籽,必須用\表示續(xù)行)
b. 所有命令所在行必須以Tab鍵開(kāi)頭
c. 要修改的是模板中各個(gè)變量的內(nèi)容(涉及的相對(duì)路徑以Makefile文件所在的目錄為基準(zhǔn))
d. Makefile的文件名:Makefile makefile
5. 命令上執(zhí)行make命令
a. make命令執(zhí)行時(shí)的當(dāng)前路徑必須與Makefile所在目錄相同
b. make會(huì)執(zhí)行當(dāng)前目錄下的Makefile文件
c. 如果make后不跟目標(biāo)名稱蹦漠,則默認(rèn)從第一條規(guī)則開(kāi)始執(zhí)行
```
  1. gcc常用選項(xiàng)的作用:
    -o:output輸出,最終輸出文件叫什么, -o 名字   
    -Wall:打開(kāi)所有的警告開(kāi)關(guān)
    -l:鏈接的時(shí)候需要用到的庫(kù)文件名字, -l庫(kù)名1 -l庫(kù)名2
                                           庫(kù)名: xyz(實(shí)際指使用libxyz.so庫(kù)文件)                       
    -L:鏈接的時(shí)候到哪個(gè)目錄里去尋找?guī)煳募? -L路徑1  -L路徑2
    -c:編譯四步车海,只做前三步笛园,生成與.c文件同名的.o文件
    -I:指示處理#include命令時(shí),到哪個(gè)目錄去尋找.h文件, -I路徑1  -I路徑2
    -fPIC -shared:生成動(dòng)態(tài)庫(kù)文件專用的選項(xiàng)
    -g:指示在生成的可執(zhí)行文件添加調(diào)試信息侍芝,以便可以使用gdb對(duì)其進(jìn)行調(diào)試  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末研铆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子州叠,更是在濱河造成了極大的恐慌棵红,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咧栗,死亡現(xiàn)場(chǎng)離奇詭異逆甜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)致板,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門交煞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人斟或,你說(shuō)我怎么就攤上這事素征。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵稚茅,是天一觀的道長(zhǎng)纸淮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)亚享,這世上最難降的妖魔是什么咽块? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮欺税,結(jié)果婚禮上侈沪,老公的妹妹穿的比我還像新娘。我一直安慰自己晚凿,他們只是感情好亭罪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著歼秽,像睡著了一般应役。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燥筷,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天箩祥,我揣著相機(jī)與錄音,去河邊找鬼肆氓。 笑死袍祖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谢揪。 我是一名探鬼主播蕉陋,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拨扶!你這毒婦竟也來(lái)了凳鬓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤患民,失蹤者是張志新(化名)和其女友劉穎村视,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體酒奶,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚁孔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惋嚎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杠氢。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖另伍,靈堂內(nèi)的尸體忽然破棺而出鼻百,到底是詐尸還是另有隱情绞旅,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布温艇,位于F島的核電站因悲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏勺爱。R本人自食惡果不足惜晃琳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琐鲁。 院中可真熱鬧卫旱,春花似錦、人聲如沸围段。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奈泪。三九已至适贸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涝桅,已是汗流浹背拜姿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苹支,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓误阻,卻偏偏與公主長(zhǎng)得像债蜜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子究反,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容