嵌入式LINUX C基礎10解析

2023-02-11 03:21:02 字數 3418 閱讀 7983

1.程序管理

1.1 程序的終止

_exit()/_exit()函式:

功能:立即終止當前正在執行的程序。

格式:#include <>

void _exit(int status);

#include <>

void _exit(int status);

注意:_exit()和_exit()函式功能上完全相同;在終止程序時,會自動關閉屬於該程序的檔案描述符,會給該程序的父程序傳送sigchld訊號,該程序的所有子程序會重新認定新的父程序為init;

引數值會被返回給父程序作為該程序終止時的退出狀態資訊,父程序需要呼叫wait系列函式來獲取該資料。

返回值:無返回值

exit()函式:

功能:引起正常程序的終止。

格式:#include <>

void exit(int status);

注意:將引數status&0377之後的資料返回給當前程序的父程序

自動呼叫所有被atexit()和on_exit()函式註冊過的函式,一般用於處理善後工作,然後終止程序。

返回值:無返回值

atexit()函式:

功能:對引數指定的函式程序註冊。

格式:#include <>

int atexit(void(*function)(void));

注意:所有被該函式註冊過的函式會在正常終止時被呼叫(呼叫exit函式和執行main函式中的return)。

返回值:成功返回0,失敗返回非零。

wait()函式

功能:主要用於掛起當前正在呼叫的程序,直到有乙個該程序的子程序終止為止,可用於**子程序,當有多個子程序時,隨機**乙個。

格式:#include

#include

pid_t wait(int *status);

注意:引數status指標表示獲取子程序的終止狀態並放到status這個變數中;如果引數為空時,表示不關心子程序的退出狀態;如果引數不為空時,該函式會將程序的狀態資訊儲存在引數指定的int型別空間中,解析該狀態需要借助以下帶參巨集,傳遞給巨集的引數必須是整數自己,而不是指向它的指標:

wifexited(*status):如果子程序正常終止(exit()或_exit()或return),則返回true;(wait if exited)

wexitstatus(*status):獲取子程序的退出碼,所謂的退出碼就是子程序呼叫exit/_exit/_exit函式的引數或者main函式的返回值的低8位,因此傳遞給這三個函式的引數和main函式的返回值最好不要超過【-128,127】;(wait exit status)

wifsignaled(*status):判斷子程序是否異常終止;如果是則通過wtermsig(status)巨集獲取導致子程序異常終止的訊號。

返回值:成功返回終止的子程序的程序號,失敗返回-1。

1.2 父程序在建立若干個子程序後呼叫wait函式

a.若所有子程序都在執行,則父程序阻塞(可視為睡眠),直到有子程序終止

b.若有乙個子程序終止,則返回該子程序的pid並通過status引數(若非空)則輸出其終止狀態;

c.若沒有需要等待子程序,則返回-1,置errno為echild(可作為多個子程序全部返回的標誌),表示所有子程序**完畢;

d.如果有乙個子程序在wait函式被呼叫之前已經終止,則將處於殭屍狀態,此時呼叫wait函式會立即返回,同時取得該子程序的終止狀態並通知父程序**其資源;

由此可見wait函式主要完成三個任務:

a.阻塞父程序的執行,直到子程序終止再繼續,停等同步(即等待子程序處理結束);

b.獲取子程序的pid和終止狀態,使父程序了解哪個子程序終止了及其終止原因;

c.為子程序收屍,防止大量的殭屍程序存在於核心而耗費系統資源;

1.3 status的使用

…int status;//定義變數以裝載子程序退出狀態

pid_t pid=wait(&status);//阻塞父程序,等待子程序結束;

if(-1==pid)

if(wifexited(status))

printf(「%d子程序正常終止,退出碼%d\n「,pid,wexitstatus(status));

else

printf(「%d子程序異常終止,終止訊號%d\n」,pid,wtermsig(status));

****使用wait函式及其相關巨集**子程序並判斷其退出狀態

#include<>

#include<>

#include<>

#include

int main()

if(0==pid)

printf("這是父程序,等待子程序...\n");

int status;

pid=wait(&status);

printf("父程序發現%d程序以%#x狀態退出\n",pid,wexitstatus(status));

return 0;

}1.4 waitpid函式

waitpid函式

使用時引入標頭檔案sys/

功能:等待並**任意或特定的子程序,。

格式:#include

#include

pid_t waitpid(pid_t pid,int*status,int options);

注意:第乙個引數:取小於-1的數,表示等待並**特定程序組(一群子程序的父程序的pid,由-pid標識)的任意子程序;等於-1,等待並**任意的子程序,相當於wait函式;等於0,等待並**與呼叫程序同程序組的任意子程序;大於0的數,等待並**特定的子程序(pid標識);

第二個引數:status,輸出子程序的終止狀態,可置null;

第三個引數:options:取0,阻塞模式,若所等子程序仍在執行,則阻塞,直到其終止;取wnohang,非阻塞模式,若所等待子程序仍在執行,並不阻塞,而是立即返回0;

返回值:成功返回終止的子程序的程序號,失敗返回-1。

****使用waitpid函式等待並**指定的子程序

#include<>

#include<>

#include

int main()

if(0==pids[i])

}for(i=0;i<3;i++)

printf("父程序:發現%d程序退出了\n",pid);

}return 0;

}****使用waipid函式的非阻塞選項**子程序

#include<>

#include<>

#include<>

#include

int main()

if(0==pid)

//pid=wait(null);

//pid=waitpid(-1,null,0);//和wait相同

for(;;)//使用迴圈不斷檢測子程序是否結束

{pid=waitpid(-1,null,wnohang);

嵌入式總結

什麼叫嵌入式系統 以應用為中心 以計算機技術為基礎 軟體硬體可裁剪 適應應用系統對功能 可靠性 成本 體積 功耗嚴格要求的專用計算機系統。什麼叫嵌入式處理器?嵌入式處理器分為哪幾類?嵌入式處理器是為完成特殊的應用而設計的特殊目的的處理器。分為四類 1 嵌入式微處理器 embedded micropr...

嵌入式總結

第三部分 arm處理器特點。功耗低 成本低 效能高 支援thumb 16位 arm 32位 雙指令集 cortex支援thumb 2 16 32位混合指令系統 指令長度固定 32位 16位 大量使用暫存器,指令執行速度更快,都可用於多種用途 定址方式靈活簡單,執行效率高 arm處理器的各系列情況。a...

嵌入式重要

什麼是嵌入式系統?2005 8 23 9 39 12 by mcublog 10推薦顧名思義,嵌入到mcu核心 嵌入式系統一般指非pc系統,它包括硬體和軟體兩部分。硬體包括處理器 微處理器 儲存器及外設器件和i o埠 圖形控制器等。軟體部分包括作業系統軟體 os 要求實時和多工操作 和應用程式程式設...