寒假學習 第16.17天 (linux 高階程式設計) 筆記 總結
pause sleep/usleep
atexit on_exit
int atexit(void (*function)(void)); //註冊終止函式(即main執行結束後呼叫的函式)
int on_exit(void (*function)(int , void *), void *arg); //跟atexit差不多,只不過函式可以帶引數
#include #include #include void fun()
int main(int argc, const char *argv)
多程序下面檔案的讀寫是共享的。
怎麼知道乙個檔案正在被另外程序讀寫?
就是要使用檔案鎖。
api:
fcntl (檔案鎖受核心引數影響)
對檔案加鎖
int fcntl(int fd, int cmd, ... /* arg */ );
返回0加鎖成功,-1加鎖失敗。
fd 加鎖的檔案符號
cmd 鎖的操作方式 f_setlk(如果已經加鎖就異常返回) f_unlk f_setlckw(已經加鎖,者、則阻塞等待等到解鎖)
... struct flock* 型別
struct flock ;
例子:setlock.c
#include #include #include #include int main(int argc, const char *argv)
getlock.c
#include #include #include #include int main(int argc, const char *argv)
; //一定要初始化0
int r;
fd=open("test.txt",o_rdwr);
if(fd==-1) printf("error:%m\n"),exit(-1);
r=fcntl(fd,f_getlk,&lk);
if(lk.l_type=f_wrlck)
printf("pid:%d,start:%d, len:%d\n",r,lk.l_pid,lk.l_start,lk.l_len);
return 0;
}
鎖也是乙個程序可以共享的資訊
流程:訊號發給作業系統,作業系統查詢這個訊號是否註冊,如果註冊系統就呼叫函式
沒有註冊則採用預設處理(一般是呼叫列印訊號提示,並終止程式)
為了解決程序之間通訊難。
作用:通知其他程序響應。(其實就是程序之間一種通訊機制)
一般接受訊號的程序會馬上停止(軟中斷),並且呼叫訊號的處理函式(預設的處理函式,或者使用者的處理函式)。
例子:kill -s 訊號 程序id //向指定的程序傳送訊號
kill -l //可以看所有的訊號 ctrl+d 就相當於傳送訊號2(即sigint)
例子:
#include #include #include void handle(int s)
int main(int argc, const char *argv)
return 0;
}
當kill -s 2 pid 時(或直接ctrl+c)就會輸出 「訊號傳送」
其中 sigkill與 sigstop
訊號是不能被處理的
int kill(pid_t pid, int sig); //傳送訊號
pid:如果》0 傳送到指定程序
如果=0 傳送訊號到該程序所在程序組的所有程序
如果=-1 傳送給除init (1)之外的所有程序
如果<0 傳送給指定的程序組(組id就是 它的絕對值)
例子:
#include #include #include int main(int argc, const char *argv)
return 0;
}
延時器 timeout
訊號:sigalrm
訊號傳送函式:unsigned int alarm(unsigned int seconds); //自向本程序發出
例子:
#include #include void deal(int s)
int main(int argc, const char *argv)
return 0;
}
定時器int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, //計時方式 itimer_real真實時間 itimer_virtual程式暫用cpu的時間 itimer_prof 程序跟系統的混合時間
const struct itimerval *new_value, //定時器的時間引數
struct itimerval *old_value); //返回原來設定的定時器,如果null 者不返回。
(set interval timter)
struct itimerval ;
struct timeval ;
例子:
#include #include #include void deal(int s)
int main(int argc, const char *argv)
; signal(sigalrm,deal);
val.it_value.tv_sec=3; //sec跟usec都為0的表無窮時間,不會觸發
val.it_interval.tv_sec=1;
setitimer(itimer_real,&val,0);
while(1)
return 0;
}
3秒鐘過後每隔1秒鐘顯示 「起床了」。 寒假學習 第11天 (linux 高階程式設計)
寒假學習 第11天 linux 高階程式設計 筆記 總結 cui字元介面,gui 圖形介面 curses就是cui的庫 老版本libcurses.so,新版本libncurses.so printf scanf 等標準io 大部分是 重定向到終端 dev tty dev pts 1,curses就是...
Linux學習第3天
目錄 高階命令 grep文字搜尋工具 系統命令 檢視 殺死程序的方式 netcat 管道符 作用 前乙個命令輸出結果,作為後乙個命令的輸入 對於前乙個命令的錯誤沒有處理能力 ls help more df lh 檢視硬碟容量和剩餘空間 free h 檢視記憶體狀況 ps process顯示所有程序以...
Linux學習筆記第1天
今天學習了linux的有關目錄的基本命令。ls 檢視當前目錄下的檔案和目錄 a檢視所有檔案和目錄,包括隱藏檔案。l檢視檔案的詳細資訊。d檢視目錄的詳細資訊,與 l一起使用。h轉換成方面人檢視的資訊 mkdir 建立目錄 p遞迴建立,可以建立新目錄的同時再建立乙個子目錄 mkdir root desk...