linux系統編程,主要使用c語言,c++是c的超集,也是能夠的linux
完整案例代碼已上傳github:github.com/neatlife/my…c++
可使用虛擬機安裝一個linux系統進行linux系統開發,雖然mac os和linux很是類似,可是和linux仍是有不少小區別的,裝虛擬機是最省事的 這裏使用elementary os,下載地址參考:elementary.io/zh_CN/git
安裝時,選linux 4.x以上的內核版本便可 github
界面效果以下: shell
安裝時能夠選英文,安裝後再改爲中文標準庫中包含下面的庫編程
線程庫pthread.h默認支持linux,windows須要額外安裝,參考:sourceforge.net/projects/pt…ubuntu
進程建立銷燬(fork、wait)等在unistd.h庫,默認支持linuxwindows
對一個運行中的程序執行快捷鍵 Ctrl + C 默認會中斷程序的運行,並使得程序退出函數
#include <stdio.h>
#include <signal.h>
int main(int argc, char *argv[]) {
printf("Hello World!");
sleep(300);
}
複製代碼
效果以下 工具
能夠看到當按下ctrl c的時候,程序立馬就退出了,這是由於當按下ctrl c時shell終端向程序發送了SIGINT信號。 默認SIGINT信號的處理是終止程序的運行,能夠經過signal.h庫中的signal函數註冊一個新的SIGINT信號的處理程序替代默認行爲,好比受到SIGINT時,簡單打印一個字符串
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
static void mySigHandler(int sig) {
printf("in signal handler\n");
}
int main(int argc, char *argv[]) {
if (signal(SIGINT, mySigHandler) == SIG_ERR) {
printf("替換信號處理器異常\n");
exit(1);
}
printf("Hello World!\n");
while (1) {
sleep(300);
}
}
複製代碼
效果以下
能夠看到已經成功接管了程序對SIGINT信號的默認處理了也可使用kill命令對一個程序發送SIGINT信號,SIGINT常理定義再signum-generic.h頭文件中
對應的數字是2,對應的kill命令就是 kill -2 進程id 能夠看到經過kill工具把SIGINT信號傳給進程了對程序發送SIGINT信號時,程序會從sleep狀態中醒過來,能夠經過無限循環讓程序持續運行
while (1) {
sleep(300);
}
複製代碼
關閉虛擬機的節能選項,防止虛擬機常常進入隨眠/退出狀態
gsettings reset org.gnome.desktop.interface monospace-font-name
gsettings set org.gnome.desktop.interface cursor-blink false
gsettings set io.elementary.files.preferences single-click false
複製代碼
SIGINT信號被替換了,ctrl c 沒法終止程序了,可使用SIGKILL信號(代號9)終止即kill -9 pid,SIGKILL信號的處理函數是沒法替換的,放心使用。
能夠選擇ubuntu做爲開發環境,這樣環境問題會比較少