2017嵌入式系統開發工程師考試模擬題

  1、簡答題。下面的題目必須全部答對才給分:(5分)

2017嵌入式系統開發工程師考試模擬題

1、在UNIX環境中,編譯流程是什麼?

2、ABI,ELF的英文全稱是什麼

3、一般UNIX的程式有多少段,舉一個實際的例子說明。

4、如何在kernel二進位制程式碼中找一個字串。

5、段地址F000:FFF0轉換為線形地址的值是多少(16進製表達)。

6、在一個UNIX檔案系統中,檔案的`唯一性標誌是什麼?

  2、問答題。

1、———————————————————–

寫一些程式碼。如何用檔案實現訊號燈?要求如果程式崩潰了,這個檔案也將自動被刪除。

為什麼可以這樣實現訊號燈?(5分)

傳統的signal函式訊號處理為什麼是不可靠的,訊號和系統呼叫有何關係?(5分)

在圖形庫系統中往往提供timer的功能,除了使用ALARM訊號外,你還可以使用什麼系統呼叫來實現timer?(5分)

2、———————————————————–

寫一些程式碼,演示如何正確使用write系統呼叫。注意看好手冊再回答。(2分)

如果一個檔案以rw模式開啟,在進行read/write操作轉換時,需要進行什麼操作。(2分)

3、———————————————————–

解釋終端結構termios.c_cc的MIN/TIME數值變化的帶來read/write的特性。(5分)

如何理解終端、控制終端、虛擬終端、控制檯、tty等類同的概念?(5分)

4、———————————————————–

解釋計算機中Copy-On-Write的概念。(2分)

呼叫fork之後,子程序沒有繼承父程序的屬性有哪些?(5分)

解釋為什麼每個程式在裝入執行之後,總是已經預先打開了stdout、stdin、stderr?(2分)

在fork之前,父程序打開了一個檔案。在fork之後,如果子程序移動了檔案指標,父程序的檔案指標有什麼變化;如果子程序關閉了檔案,父程序有什麼變化?為什麼會這樣?(5分)

標準輸入、輸出和錯誤輸出分別是什麼型別的緩衝,這些緩衝在使用者空間還是在核心空間?

怎樣關閉他們的緩衝?如果父程序關閉了緩衝,在fork之後建立的子程序是否也關閉了緩衝?(5分)

vfork和fork相比,有什麼特色?(2分)

system函式是否等同於fork+exec?(2分)

wait系統呼叫有多少種條件可以退出?(2分)

5、———————————————————–

系統呼叫和庫函式呼叫有什麼區別。(2分)

在linux2.4.x上的glibc和newlib(一種嵌入式C庫)的系統呼叫有什麼不同?(2分)

在linux2.4.x上,對系統呼叫execve如果呼叫成功,它返回的值是多少。(2分)

6、———————————————————–

列出你所知道的2個記憶體跟蹤庫。(2分)

設計一個記憶體跟蹤方案,為什麼選擇這個方案(5分)

  3、分析題。

本題(各5分)。假設下面程式碼中的變數都是合法變數,呼叫外部的函式都是正確的。回答幾個問題:

這些程式碼意圖要幹什麼?

是否有問題?

如果有問題,該如何修改,或者如何避免類似錯誤發生?

如果沒有問題,如果程式碼有輸出,輸出是什麼?

1、———————————————————–

int isvowel (char c)

{

return c==’a’’’’’’’’||c==’e’’’’’’’’||c==’i’’’’’’’’||c==’o’’’’’’’’||c==’u’’’’

}

2、———————————————————–

while (c==’t’||c=’ ‘||c==’n’)

c=getc(f);

3、———————————————————–

/* 當x=2, y=3, z=? */

if (x==0)

if (y==0)

z=-1;

else

z=x+y;

4、———————————————————–

/* 處理網路事件 */

void process_network_code(int x, int y)

{

/* 選擇modes_pointer資源 */

switch (line) {

case THING1:

/* 處理異常1#, 使用老的modes_pointer資源 */

doit1();

break;

case THING2:

/* 處理異常2#, 需要重新啟動服務 */

if (x == STUFF) {

/* 重新申請modes_pointer資源,沒有初始化 */

do_first_stuff();

/* 在這種條件下,有些資源不用重新申請 */

if (y == OTHER_STUFF)

break;

/* 申請剩下的資源,並初始化 */

do_later_stuff();

}

/* 初始化modes_pointer資源 */

initialize_modes_pointer();

break;

default:

/* 處理普通事件, 使用老的modes_pointer資源 */

processing();

}

/* 使用modes_pointer資源,處理事件 */

use_modes_pointer();

}

5、———————————————————–

int is_gb2312_char(char c1, char c2)

{

if (c1 >= 0xa1 && c2 >= 0xa1)

return 1;

else

return 0;

}