摘抄網上的pdf檔案,有增改。
一:五種狀態:
1.新建:表示程序正在被建立。
2.執行:表示程序正在執行。
3.阻塞:程序正在等待某乙個事件發生。
4.就緒:表示系統正在等待cpu來執行命令。
5.完成:表示程序已經結束,系統正在**資源。
二:getpid()可以得到程序 的id,getppid()可以得到父程序 的id.
#include
pid_t getpid(void);
pid_t getppid(void);
getuid可以得到程序的所有者的id。由於程序要用到一些資源,而linux對系統資源是進行保護的,為了獲取一定的資源,程序還有乙個有效使用者id。geteuid()可以得到程序的有效使用者id和使用者id,相對應程序還有乙個組id和有效組id,系統呼叫getgid和getegid可以分別得到組id和有效組id
getuid——————程序的所有者id
geteuid————— 有效使用者id和使用者id
getgid——————組id
getegid—————-有效組id
getpwuid————--使用者其他資訊
#include
#include
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
gid_t getegid(vodi);
對使用者的其他資訊感興趣,可以呼叫getpwuid來得到。
三:建立乙個程序的系統呼叫——fork()
#include
pid_t fork();
乙個程序呼叫fork以後,系統會建立乙個子程序。子程序和父程序不同的地方只有id ,其他都一樣,就像轉殖自己。為了區分子程序和父程序,必須跟蹤fork的返回值 ,對於父程序fork返回子程序的id,對於fork子程序返回0。
為什麼父程序要建立子程序?
linux 是乙個多使用者作業系統,在同一時間會有許多的使用者在爭奪系統的資源.有時程序為了早一點完成任務就建立子程序來爭奪資源. 一旦子程序被建立,父子程序一起從fork 處繼續執行,相互競爭系統的資源。
有時候我們希望子程序繼續執行,而父程序阻塞知道子程序完成任務。這時候呼叫wait()或者waitpid()
#include
#include
pid_t wait(int *stat_loc)
pid_t waitpid(pid_t pid,int *stat_loc,int options);
wait系統呼叫會使父程序阻塞 直到乙個子程序結束 或者是父程序接受到乙個訊號 ,如果沒有父程序沒有子程序或他的子程序已經結束了wait會立即返回。成功時(因乙個子程序結束)wait將返回子程序的id ,否則返回-1,並設定全域性變數errno.stat_loc是子程序的退出狀態 。子程序呼叫exit,_exit或者是return來設定這個值。為得到這個值,linux定義了幾個巨集來測試這個返回值。
wifexited:判斷子程序退出值是非0
wexitstatus:判斷子程序的退出值(當子程序退出時非0)
wifsignaled:子程序由於有 沒有獲得的訊號而退出。
wtermsig:子程序沒有獲得的訊號號(在wifsignaled為真時才有意義)
waitpid等待指定的子程序直到子程序返回 。如果pid為正值則等待指定的程序(pid).如果為0則等待任何乙個組id和呼叫者的組id相同的程序。
為-1時等同於wait呼叫 。小於-1時等待任何乙個組id等於pid絕對值的程序。
options可以決定父程序的狀態,可以取兩個值
wnohang:父程序立即返回沒有子程序存在時。
wuntached:當子程序結束時waitpid返回,但是子程序的退出狀態不可得到。
子程序一般要執行不同的程式,為了呼叫系統程式,可以使用exec族呼叫。
#include ;
int execl(const char *path,const char *arg,...);
int execlp(const char *file,const char *arg,...);
int execle(const char *path,const char *arg,...);
int execv(const char *path,char *const argv);
int execvp(const char *file,char *const argv):
後台程序的建立思想:首先父程序建立乙個子程序人然後子程序殺死父程序。訊號處理的所有工作由子程序來處理。 (mail例子)
Linux下C語言程式設計
include include include include define max 10pthread t thread 2 pthread mutex t mut int number 0 i void thread1 printf thread1 主函式在等我完成任務嗎?n pthread e...
Linux 下C語言程式設計
linux 下c語言程式設計 1.程式設計的概念和理解 1.1程式編譯的過程 在這一操作中,程式完成了複雜的過程。乙個程式的編譯,需要完成詞法分析 語法分析 中間 生成 優化 目標 生成。l 詞法分析 指的是對由字元組成的單詞進行處理,從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞符號。然後把字...
關於Linux下C語言TCP的程式設計流程
說到tcp,首先能想到的就是它面向連線 位元組流和可靠三個特點了。使用tcp協議通訊的雙方必須先建立連線,然後才能開始資料的讀寫。本文就是主要講述,如何在linux下的乙個tcp程式設計流程。首先先來說伺服器端的程式設計流程 首先就是建立乙個socket套接字,然後將伺服器打的ip位址和使用的埠號與...