1. 程式人生 > 程式設計 >三分鐘上手linux系統開發

三分鐘上手linux系統開發

linux系統程式設計,主要使用c語言,c++是c的超集,也是可以的

完整案例程式碼已上傳github:github.com/neatlife/my…

獲取可用環境

可以使用虛擬機器器安裝一個linux系統進行linux系統開發,雖然mac os和linux非常相似,但是和linux還是有很多小區別的,裝虛擬機器器是最省事的 這裡使用elementary os,下載地址參考:elementary.io/zh_CN/

安裝時,選linux 4.x以上的核心版本即可

介面效果如下:

安裝時可以選英文,安裝後再改成中文

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…

程式建立銷燬(fork、wait)等在unistd.h庫,預設支援linux

一個例子-替換訊號處理

對一個執行中的程式執行快捷鍵 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/…