三分鐘上手linux系統開發

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

安裝時能夠選英文,安裝後再改爲中文

C語言標準庫

標準庫中包含下面的庫編程

  • assert.h
  • ctype.h
  • errno.h
  • float.h
  • limits.h
  • locale.h
  • math.h
  • setjmp.h
  • signal.h
  • stdarg.h
  • stddef.h
  • stdio.h
  • stdlib.h
  • string.h
  • time.h

c標準庫
這些庫中通常都包含一些結構體和幾個函數,其中輸入輸出庫stdio.h, 通常函數庫(malloc、free等)stdlib.h,字符串處理庫string.h最經常使用了

線程庫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做爲開發環境,這樣環境問題會比較少

參考資料

  1. blog.csdn.net/u012422855/…
相關文章
相關標籤/搜索