導航:首頁 > 編程系統 > linuxcsignal

linuxcsignal

發布時間:2023-09-05 04:33:52

『壹』 linux環境下C開發_linux搭建c語言開發環境

一:C語言嵌入式Linux工程師的學習需要具備一定的C語言基礎,C語言是嵌入式領域最重要也是最主要的編程語言,通過大量編程實例重點理解C語言的基礎編程以及高級編程知識。包括:基本數據類型、數組、指針、結構體、鏈表、文件操作、隊列、棧等。

二:Linux基礎Linux操作系統的概念、安裝方法,詳細了解Linux下的目錄結構、基本命令、編輯器VI,編譯器GCC,調試器GDB和Make項目管理工具,ShellMakefile腳本編寫等知識,嵌入式開發環境的搭建。

三:Linux系統編程重點學習標准I/O庫,Linux多任務編程中的多進程和多線程,以及進程間通信(pipe、FIFO、消息隊列、共享內存、signal、信號量等),同步與互斥對共享資源訪問控制等重要知識,主要提升對Linux應用開發的理解和代碼調試的能力。

四:Linux網路編程計算機網路在嵌入式Linux系統應用開發過程中使用非常廣泛,通過Linux網路發展、TCP/IP協議、socket編程、TCP網路編程、UDP網路編程、Web編程開發等方面入手,全面了解Linux網路應用程序開發。重點學習網路編程相關API,熟練掌握TCP協議伺服器的編程方法和並發伺服器的實現,了解HTTP協議及其實現方法,熟悉UDP廣播、多播的原理及編程方法,掌握混合C/S架構網路通信系統的設計,熟悉HTML,Javascript等Web編程技術及實現方法。

五:數據結構與演算法數據結構及演算法在嵌入式底層驅動、通信協議、及各種引擎開發中會得到大量應用,對其掌握的好壞直接影響程序的效率、簡潔及健壯旅瞎性。此階段的學習要重點理解數據結構與演算法的基礎內容,包括順序表、鏈表、隊列、棧、樹、圖、哈希表、各種查找排序演算法等應用及其C語言實現過程。

六:C、QTC是Linux應用開發主要語言之一,本階段重點掌握面向對象編程的基本思想以及C的重要內容。圖形界面編程是嵌入式開發中非常重要的一個環節。由於QT具有跨平台、面向對象、豐富API、支持2D/3D渲染、支持XML、多國語等強大功能,在嵌入式領域的GUI開發中得到了廣范的應用,在本階段通過基於QT圖形庫的學習使學員可以熟練編寫GUI程序,並移植QT應用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息與槽機制的應用、滑鼠、鍵盤及繪圖事件處理及文件處理的應用。

七:CortexA8、Linux平台開發通過基於ARMCortex-A8處理s5pv210了解晶元手冊的基本閱讀技巧,掌握s5pv210系統資源、時鍾控制器、電源管理、異常中斷控制器、nandflash控制器等模塊,為底層平台搭建做好准備。Linux平台包括內核裁減、內核移植、交叉編譯、GNU工具使用、內核調試、Bootloader介紹、製作與原理分析、根文件系統製作以及向內核中添加自己的模塊,並在s5pv210實驗平台上運行自己製作的Linux系統,集成部署Linux系統整個流程。同時了解Android操作系統開發流程。Android系統是基於Linux平台的開源操作系統,該平台由操作系統、中間件、用戶界面和應用軟體組成,是首個為移動終端打造的真正開放和完整的移動軟體,目前它的應用不再局限於移動終端,還包括數據電視、機頂盒、PDA等消費類電子產品。

八:驅動開發拆顫空驅動程序設計是嵌入式Linux開發工作中重要的一部分,也是比較困難的一部分。本階洞租段的學習要熟悉Linux的內核機制、驅動程序與用戶級應用程序的介面,掌握系統對設備的並發操作。熟悉所開發硬體的工作原理,具備ARM硬體介面的基礎知識,熟悉ARMCortex-A8處理器s5pv210各資源、掌握Linux設備驅動原理框架,熟悉工程中常見Linux高級字元設備、塊設備、網路設備、USB設備等驅動開發,在工作中能獨立勝任底層驅動開發。

以上就是列出的關於一名合格嵌入式Linux開發工程師所必學的理論知識,其實,作為一個嵌入式開發人員,專業知識和項目經驗同樣重要,所以在我們的理論學習中也要有一定的項目實踐,鍛煉自己的項目開發能力。

『貳』 Linux 環境下的C語言, 關於 kill 發送信號和 signal() 函數, 具體問題在以下代碼的注釋處

pause()會令目前的進程暫停(進入睡眠狀態), 直到被信號(signal)所中斷。

當50信號觸動了,pause將退出睡眠狀態,執行printf和return

『叄』 linux C信號發送和接收sigaction()和pthread_kill()怎麼不行呢

1. 默認情況下,信號將由主進程接收處理,就算信號處理函數是由子線程注冊的
2. 每個線程均有自己的信號屏蔽字,可以使用sigprocmask函數來屏蔽某個線程對該信號的響應處理,僅留下需要處理該信號的線程來處理指定的信號。
3. 對某個信號處理函數,以程序執行時最後一次注冊的處理函數為准,即在所有的線程里,同一個信號在任何線程里對該信號的處理一定相同
4. 可以使用pthread_kill對指定的線程發送信號

APUE的說法:每個線程都有自己的信號屏蔽字,但是信號的處理是進程中所有的線程共享的,

這意味著盡管單個線程可以阻止某些信號,但當線程修改了與某個信號相關的處理行為後,所

有的線程都共享這個處理行為的改變。這樣如果一個線程選擇忽略某個信號,而其他線程可

以恢復信號的默認處理行為,或者為信號設置一個新的處理程序,從而可以撤銷上述線程的

信號選擇。

進程中的信號是送到單個線程的,如果信號與硬體故障或者計時器超時有關,該型號就被發

送到引起該事件的線程中去,而其他的信號則被發送到任意一個線程。

sigprocmask的行為在多線程的進程中沒有定義,線程必須使用pthread_sigmask

總結:一個信號可以被沒屏蔽它的任何一個線程處理,但是在一個進程內只有一個多個線程共用的處理函數。

『肆』 linux c 使用alarm SIGALRM信號發送後直接就退出。如何做才能不退出。

一、 使用時鍾和定時器(alarm系統調用)

#include <unistd.h>

unsigned alarm(unsigned secs);

/*returns secs left on previous alarm or zero if none */

alarm也稱為鬧鍾函數,它可以在進程中設置一個定時器,當指定的時間到時,它向進程發送SIGALRM信號。需要注意的是,一個進程只能有一個定時器。當報警開始時,會發送一個SIGALRM,子進程繼承其父進程的報警時鍾值,但實際的時鍾並不共享。執行exec後,報警時鍾仍然保持其設置。

alarm按照secs指定的秒數來設置時鍾,如果secs為0,則關閉報警時鍾,這樣做是很有必要的,如果recvfrom函數讀到數據,沒到設定時鍾值時就返回了,而你又忘記關閉報警時鍾的話,那麼它將在不久後報警,在計算機看來,1秒都是一個很漫長的時間,1秒後的報警可能會造成本進程中其他函數執行的中斷,因為一個進程只有一個定時器,所以使用完定時器後,一定要關閉定時器。

實例代碼:

詳細代碼

『伍』 請教一個Linux下C語言的進程間的信號問題

linux中的進程通信分為三個部分:低級通信,管道通信和進程間通信IPC(inter process communication)。linux的低級通信主要用來傳遞進程的控制信號——文件鎖和軟中斷信號機制。linux的進程間通信IPC有三個部分——①信號量,②共享內存和③消息隊列。以下是我編寫的linux進程通信的C語言實現代碼。操作系統為redhat9.0,編輯器為vi,編譯器採用gcc。下面所有實現代碼均已經通過測試,運行無誤。

一.低級通信--信號通信

signal.c

#include
#include
#include

/*捕捉到信號sig之後,執行預先預定的動作函數*/
void sig_alarm(int sig)
{
printf("---the signal received is %d. /n", sig);
signal(SIGINT, SIG_DFL); //SIGINT終端中斷信號,SIG_DFL:恢復默認行為,SIN_IGN:忽略信號
}

int main()
{
signal(SIGINT, sig_alarm);//捕捉終端中斷信號
while(1)
{
printf("waiting here!/n");
sleep(1);
}
return 0;
}

二.管道通信

pipe.c

#include
#define BUFFER_SIZE 30

int main()
{
int x;
int fd[2];
char buf[BUFFER_SIZE];
char s[BUFFER_SIZE];
pipe(fd);//創建管道
while((x=fork())==-1);//創建管道失敗時,進入循環

/*進入子進程,子進程向管道中寫入一個字元串*/
if(x==0)
{
sprintf(buf,"This is an example of pipe!/n");
write(fd[1],buf,BUFFER_SIZE);
exit(0);
}

/*進入父進程,父進程從管道的另一端讀出剛才寫入的字元串*/
else
{
wait(0);//等待子進程結束
read(fd[0],s,BUFFER_SIZE);//讀出字元串,並將其儲存在char s[]中
printf("%s",s);//列印字元串
}
return 0;
}

三.進程間通信——IPC

①信號量通信

sem.c

#include
#include
#include
#include types.h>
#include ipc.h>
#include sem.h>

/*聯合體變數*/
union semun
{
int val; //信號量初始值
struct semid_ds *buf;
unsigned short int *array;
struct seminfo *__buf;
};

/*函數聲明,信號量定義*/
static int set_semvalue(void); //設置信號量
static void del_semvalue(void);//刪除信號量
static int semaphore_p(void); //執行P操作
static int semaphore_v(void); //執行V操作
static int sem_id; //信號量標識符

int main(int argc, char *argv[])
{
int i;
int pause_time;
char op_char = 'O';
srand((unsigned int)getpid());
sem_id = semget((key_t)1234, 1, 0666 | IPC_CREAT);//創建一個信號量,IPC_CREAT表示創建一個新的信號量

/*如果有參數,設置信號量,修改字元*/
if (argc > 1)
{
if (!set_semvalue())
{
fprintf(stderr, "Failed to initialize semaphore/n");
exit(EXIT_FAILURE);
}
op_char = 'X';
sleep(5);
}
for(i = 0; i < 10; i++)
{

/*執行P操作*/
if (!semaphore_p())
exit(EXIT_FAILURE);
printf("%c", op_char);
fflush(stdout);
pause_time = rand() % 3;
sleep(pause_time);
printf("%c", op_char);
fflush(stdout);

/*執行V操作*/
if (!semaphore_v())
exit(EXIT_FAILURE);
pause_time = rand() % 2;
sleep(pause_time);
}
printf("/n%d - finished/n", getpid());
if (argc > 1)
{
sleep(10);
del_semvalue(); //刪除信號量
}
exit(EXIT_SUCCESS);
}

/*設置信號量*/
static int set_semvalue(void)
{
union semun sem_union;
sem_union.val = 1;
if (semctl(sem_id, 0, SETVAL, sem_union) == -1)
return(0);

return(1);
}

/*刪除信號量*/
static void del_semvalue(void)
{
union semun sem_union;
if (semctl(sem_id, 0, IPC_RMID, sem_union) == -1)
fprintf(stderr, "Failed to delete semaphore/n");
}

/*執行P操作*/
static int semaphore_p(void)
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1; /* P() */
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_p failed/n");
return(0);
}
return(1);
}

/*執行V操作*/
static int semaphore_v(void)
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = 1; /* V() */
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_v failed/n");
return(0);
}
return(1);
}

②消息隊列通信

send.c

#include
#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include msg.h>
#define MAX_TEXT 512

/*用於消息收發的結構體--my_msg_type:消息類型,some_text:消息正文*/
struct my_msg_st
{
long int my_msg_type;
char some_text[MAX_TEXT];
};

int main()
{
int running = 1;//程序運行標識符
struct my_msg_st some_data;
int msgid;//消息隊列標識符
char buffer[BUFSIZ];

/*創建與接受者相同的消息隊列*/
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
if (msgid == -1)
{
fprintf(stderr, "msgget failed with error: %d/n", errno);
exit(EXIT_FAILURE);
}

/*向消息隊列中發送消息*/
while(running)
{
printf("Enter some text: ");
fgets(buffer, BUFSIZ, stdin);
some_data.my_msg_type = 1;
strcpy(some_data.some_text, buffer);
if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1)
{
fprintf(stderr, "msgsnd failed/n");
exit(EXIT_FAILURE);
}
if (strncmp(buffer, "end", 3) == 0)
{
running = 0;
}
}
exit(EXIT_SUCCESS);
}

receive.c

#include
#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include msg.h>

/*用於消息收發的結構體--my_msg_type:消息類型,some_text:消息正文*/
struct my_msg_st
{
long int my_msg_type;
char some_text[BUFSIZ];
};

int main()
{
int running = 1;//程序運行標識符
int msgid; //消息隊列標識符
struct my_msg_st some_data;
long int msg_to_receive = 0;//接收消息的類型--0表示msgid隊列上的第一個消息

/*創建消息隊列*/
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
if (msgid == -1)
{
fprintf(stderr, "msgget failed with error: %d/n", errno);
exit(EXIT_FAILURE);
}

/*接收消息*/
while(running)
{
if (msgrcv(msgid, (void *)&some_data, BUFSIZ,msg_to_receive, 0) == -1)
{
fprintf(stderr, "msgrcv failed with error: %d/n", errno);
exit(EXIT_FAILURE);
}
printf("You wrote: %s", some_data.some_text);
if (strncmp(some_data.some_text, "end", 3) == 0)
{
running = 0;
}
}

/*刪除消息隊列*/
if (msgctl(msgid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "msgctl(IPC_RMID) failed/n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}

③共享內存通信

share.h

#define TEXT_SZ 2048 //申請共享內存大小
struct shared_use_st
{
int written_by_you; //written_by_you為1時表示有數據寫入,為0時表示數據已經被消費者提走
char some_text[TEXT_SZ];
};

procer.c

#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include shm.h>
#include "share.h"

int main()
{
int running = 1; //程序運行標志位
void *shared_memory = (void *)0;
struct shared_use_st *shared_stuff;
char buffer[BUFSIZ];
int shmid; //共享內存標識符

/*創建共享內存*/
shmid = shmget((key_t)1234, sizeof(struct shared_use_st), 0666 | IPC_CREAT);
if (shmid == -1)
{
fprintf(stderr, "shmget failed/n");
exit(EXIT_FAILURE);
}

/*將共享內存連接到一個進程的地址空間中*/
shared_memory = shmat(shmid, (void *)0, 0);//指向共享內存第一個位元組的指針
if (shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed/n");
exit(EXIT_FAILURE);
}
printf("Memory attached at %X/n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;

/*生產者寫入數據*/
while(running)
{
while(shared_stuff->written_by_you == 1)
{
sleep(1);
printf("waiting for client.../n");
}
printf("Enter some text: ");
fgets(buffer, BUFSIZ, stdin);
strncpy(shared_stuff->some_text, buffer, TEXT_SZ);
shared_stuff->written_by_you = 1;
if (strncmp(buffer, "end", 3) == 0)
{
running = 0;
}
}

/*該函數用來將共享內存從當前進程中分離,僅使得當前進程不再能使用該共享內存*/
if (shmdt(shared_memory) == -1)
{
fprintf(stderr, "shmdt failed/n");
exit(EXIT_FAILURE);
}
printf("procer exit./n");
exit(EXIT_SUCCESS);
}

customer.c

#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include shm.h>
#include "share.h"

int main()
{
int running = 1;//程序運行標志位
void *shared_memory = (void *)0;
struct shared_use_st *shared_stuff;
int shmid; //共享內存標識符
srand((unsigned int)getpid());

/*創建共享內存*/
shmid = shmget((key_t)1234, sizeof(struct shared_use_st), 0666 | IPC_CREAT);
if (shmid == -1)
{
fprintf(stderr, "shmget failed/n");
exit(EXIT_FAILURE);
}

/*將共享內存連接到一個進程的地址空間中*/
shared_memory = shmat(shmid, (void *)0, 0);//指向共享內存第一個位元組的指針
if (shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed/n");
exit(EXIT_FAILURE);
}
printf("Memory attached at %X/n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;
shared_stuff->written_by_you = 0;

/*消費者讀取數據*/
while(running)
{
if (shared_stuff->written_by_you)
{
printf("You wrote: %s", shared_stuff->some_text);
sleep( rand() % 4 );
shared_stuff->written_by_you = 0;
if (strncmp(shared_stuff->some_text, "end", 3) == 0)
{
running = 0;
}
}
}

/*該函數用來將共享內存從當前進程中分離,僅使得當前進程不再能使用該共享內存*/
if (shmdt(shared_memory) == -1)
{
fprintf(stderr, "shmdt failed/n");
exit(EXIT_FAILURE);
}

/*將共享內存刪除,所有進程均不能再訪問該共享內存*/
if (shmctl(shmid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "shmctl(IPC_RMID) failed/n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}

摘自:

『陸』 Linux C函數實例速查手冊的目錄

第1章 初級I/O函數
1.1 close函數:關閉已經打開的文件
1.2 creat函數:創建一個文件
1.3 p函數:復制文件描述符
1.4 p2函數:復制文件描述符到指定的位置
1.5 fcntl函數:改變文件的狀態
1.6 fsync函數:將緩沖區數據回寫到磁碟文件
1.7 Lseek函數:移動文件的讀寫位置
1.8 open函數:打開一個文件
1.9 read函數:讀取文件的數據
1.10 sync函數:將所有打開的文件寫回磁碟
1.11 write函數:輸出內容到文件
第2章 文件管理操作函數
2.1 access函數:判斷進程是否具有訪問文件的許可權
2.2 alphasort函數:按照字母順序排序目錄結構
2.3 chdir函數:改變當前的工作目錄
2.4 chmod函數:改變文件的許可權
2.5 chown函數:改變文件的所有者
2.6 chroot函數:改變進程的根目錄
2.7 closedir函數:關閉目錄文件
2.8 fchdir函數:使用文件描述符改變當前的工作目錄
2.9 fchmod函數:改變一個已經打開的文件的許可權
2.10 fstat函數:得到一個打開文件的狀態
2.11 truncate函數:改變一個打開文件的大小
2.12 ftw函數:遍歷目錄樹
2.13 get_current_dir_name函數:取得當前的工作目錄
2.14 getcwd函數:取得進程的當前工作目錄
2.15 lchown函數:改變符號鏈接文件的擁有者
2.16 link函數:建立一個硬鏈接
2.17 lstat函數:得到符號鏈接的文件狀態
2.18 nftw函數:遍歷目錄樹
2.19 opendir函數:打開目錄文件
2.20 readdir函數:讀取目錄文件的內容
2.21 readlink函數:讀取符號鏈接文件本身的內容
2.22 realpath函數:將相對目錄路徑轉換成絕對路徑
2.23 remove函數:刪除文件或者目錄
2.24 rename函數:更改文件的名稱或位置
2.25 rewinddir函數:回卷目錄文件
2.26 seekdir函數:文件定位函數
2.27 stat函數:取得文件狀態
2.28 symlink函數:創建一個符號鏈接
2.29 telldir函數:取得目錄文件的讀取位置
2.30 truncate函數:改變文件大小
2.31 umask:設置創建文件時使用的許可權掩碼
2.32 unlink函數:刪除文件的一個硬鏈接
第3章 標准I/O函數
3.1 clearerr函數:清除錯誤標志
3.2 fclose函數:關閉流文件描述符
3.3 fdopen函數:轉換文件描述符到文件指針
3.4 feof函數:文件結束判斷函數
3.5 fflush函數:刷新流文件讀寫緩存
3.6 fgetc函數:從流文件中讀取一個字元
3.7 fgetpos函數:返迴流文件當前讀寫位置
3.8 fgets函數:從流文件中讀出一行數據
3.9 fileno函數:獲得流文件的文件描述符
3.10 fopen函數:打開文件
3.11 fputc函數:將字元寫入流文件
3.12 fputs函數:將字元串寫入流文件
3.13 fread函數:從流文件中讀出數據
3.14 freopen函數:打開文件
3.15 fseek函數:移動流文件的讀寫位置
3.16 fsetpos函數:設置流文件當前讀寫位置
3.17 ftell函數:得到流文件的讀取位置
3.18 fwrite函數:向流文件中寫入數據
3.19 getc函數:從文件中讀出一個字元
3.20 getchar函數:從標准輸入中讀入一個字元
3.21 gets函數:從標准輸入中讀入一行數據
3.22 mktemp函數:產生臨時文件的文件名
3.23 putc函數:將字元寫入文件
3.24 putchar函數:將字元輸出到標准輸出中
3.25 puts函數:將字元串輸出在標准輸出中
3.26 rewind函數:將流文件的讀寫位置移動到文件的起始位置
3.27 setbuf函數:設置文件緩沖區
3.28 setbuffer函數:設置文件緩沖區
3.29 setlinebuf函數:設置行緩沖模式
3.30 setvbuf函數:設置自定義文件緩沖區
3.31 tmpfile函數:建立臨時的二進制文件
3.32 ungetc函數:將字元寫迴文件
第4章 格式化輸入輸出函數
4.1 fprintf函數:格式化輸出到文件
4.2 fscanf函數:格式化從文件中讀出數據
4.3 printf函數:格式化輸出
4.4 scanf函數:格式化輸入
4.5 snprintf函數:格式化字元輸入
4.6 sprintf函數:格式化字元串列印
4.7 sscanf函數:格式化字元串取值
4.8 vfprintf函數:可變參數輸出函數
4.9 vfscanf函數:格式化輸入
4.10 vprintf函數:格式化輸出函數
4.11 vscanf函數:格式化輸入函數
4.12 vsnprintf函數:格式化字元串復制
4.13 vsprintf函數:格式化字元串復制
4.14 vsscanf函數:格式化字元輸入
第5章 進程式控制制
5.1 abort函數:進程異常終止函數
5.2 atexit函數:進程終止處理函數
5.3 execl函數:執行文件函數
5.4 execle函數:執行文件的函數
5.5 execlp函數:從PATH環境變數中查找文件並執行
5.6 execv函數:執行文件
5.7 execve函數:執行文件
5.8 execvp函數:執行文件
5.9 exit函數:結束進程運行的函數
5.10 _exit函數:結束進程運行的函數
5.11 fork函數:建立一個新的進程
5.12 getgid函數:取得實際進程組ID
5.13 getegid函數:取得有效進程組ID
5.14 getpid函數:取得有效組ID
5.15 getppid函數:取得父進程的進程識別碼
5.16 getpriority函數:取得進程執行優先順序
5.17 longjmp函數:跳到原先setjmp存儲的堆棧環境
5.18 on_exit函數:設置程序正常結束前調用的函數
5.19 setjmp函數:存儲當前堆棧環境
5.20 setgid函數:設置進程的進程組ID
5.21 setuid函數:設置進程組ID
5.22 setpriority函數:設置程序進程優先順序
5.23 siglongjmp函數:跳到原先sigset jmp存儲的堆棧環境
5.24 sigsetjmp函數:存儲當前堆棧環境和屏蔽的信號集
5.25 system函數:執行Shell命令
5.26 vfork函數:建立一個新的進程
5.27 wait函數:等待子進程中斷或結束
5.28 waitpid函數:等待子進程中斷或結束
5.29 wait3函數:等待進程結束並且輸出子進程統計信息
第6章 進程間通信函數
6.1 ftok函數:獲得項目相關的IPC鍵值
6.2 msgctl函數:消息隊列操作函數
6.3 msgget函數:創建或打開消息隊列
6.4 msgrcv函數:讀取消息隊列
6.5 msgsnd函數:向消息隊列中寫入消息
6.6 semctl函數:信號量操作函數
6.7 semget函數:創建或打開信號量
6.8 semop函數:釋放或獲取信號量
6.9 shmat函數:導入共享內存
6.10 shmctl函數:共享內存操作函數
6.11 shmdt函數:將共享內存從程序中脫離
6.12 shmget函數:創建共享內存
6.13 mkfifo函數:創建fifo管道函數
6.14 pclose函數:關閉管道文件
6.15 pipe函數:創建匿名管道
6.16 popen函數:創建管道文件
第7章 信號函數
7.1 alarm函數:內核定時器函數
7.2 kill函數:信號發送函數
7.3 pause函數:進程暫停執行函數
7.4 raise函數:向進程自身發送信號函數
7.5 sigaction函數:高級信號處理方式設置函數
7.6 sigaddset函數:添加信號到信號集函數
7.7 sigdelset函數:刪除信號集中對應信號函數
7.8 sigemptyset函數:清空信號集函數
7.9 sigfillset函數:填充信號集函數
7.10 sigismember函數:測試某個信號是否在信號集中
7.11 signal函數:信號處理方式設置函數
7.12 sigpause函數:暫停進程直到信號到來
7.13 sigpending函數:查詢未決信號
7.14 sigprocmask函數:信號屏蔽函數
7.15 sigsuspend函數:暫停直到信號到來
7.16 sleep函數:讓進程休眠一段時間
第8章 用戶、組函數及環境變數函數
8.1 clearenv函數:刪除所有環境變數的值
8.2 cuserid函數:獲得用戶名函數
8.3 endgrent函數:關閉系統組文件函數
8.4 endpwent函數:關閉系統口令函數
8.5 entent函數:關閉utmp文件
8.6 fgetgrent函數:從文件中讀取組數據
8.7 fgetpwent函數:從文件中讀取密碼格式數據
8.8 getegid函數:獲得有效(effective gid)組識別符
8.9 getenv函數:取得環境變數的值
8.10 geteuid函數:獲得有效(effective uid)用戶識別符
8.11 getgid函數:獲得組識別符
8.12 getgrent函數:從文件/etc/group中讀取組信息
8.13 getgrgid函數:從文件/etc/group中查找組信息
8.14 getgrnam函數:從文件/etc/group中查找組信息
8.15 getgroups函數:返回當前用戶所屬的組列表
8.16 getlogin函數:獲取當前用戶的賬號名稱
8.17 getpw函數:獲取指定uid的用戶信息
8.18 getpwent函數:讀取/etc/passwd文件中的數據
8.19 getpwnam函數:以用戶名獲取用戶信息
8.20 getpwuid函數:以用戶ID獲取用戶信息
8.21 getuid函數:獲取當前進程所屬的用戶ID
8.22 getutent函數:獲取登錄信息
8.23 getutid函數:獲取指定用戶ID的登錄信息
8.24 getutline函數:查找指定的登錄信息
8.25 initgroups函數:初始化組信息
8.26 logwtmp函數:添加登錄記錄信息
8.27 putenv函數:改變環境變數的值
8.28 pututline函數:添加登錄信息
8.29 setegid函數:設置有效組ID
8.30 setenv函數:改變環境變數的值
8.31 seteuid函數:設置有效用戶ID
8.32 setfsgid函數:設置進程的文件系統的組ID
8.33 setfsuid函數:設置進程的文件系統的用戶ID
8.34 setgid函數:設置進程的組ID
8.35 setgrent函數:將文件etc/group的讀寫位置移動到起始位置
8.36 setgroups函數:設置當前進程的組識別符
8.37 setpwent函數:將文件etc/passwd的讀寫位置移動到起始位置
8.38 setregid函數:設置當前進程的真實以及有效組ID
8.39 setreuid函數:設置當前進程的真實以及有效用戶ID
8.40 setuid函數:設置進程的用戶ID
8.41 setutent函數:將文件utmp的讀寫位置移動到起始位置
8.42 unsetenv函數:清除環境變數的值
8.43 updwtmp函數:將登錄數據記錄寫入utmp文件
8.44 utmpname函數:設置文件utmp的絕對位置
第9章 錯誤處理與內存分配函數
9.1 brk函數:改變數據段大小
9.2 calloc函數:內存分配函數
9.3 ferror函數:文件錯誤判斷
9.4 free函數:釋放動態分配內存函數
9.5 getpagesize函數:獲得操作系統內存頁大小函數
9.6 malloc函數:動態內存分配函數
9.7 mmap函數:文件映射函數
9.8 munmap函數:釋放映射的內存地址
9.9 perror函數:錯誤原因輸出函數
9.10 realloc函數:內存截取函數
9.11 sbrk函數:增加數據空間
9.12 strerror函數:錯誤代碼查詢
第10章 日誌函數、動態函數與正則表達式函數
10.1 closelog函數:關閉信息記錄
10.2 dlclose函數:關閉動態庫文件
10.3 dlerror函數:動態函數出錯處理
10.4 dlopen函數:打開動態庫文件
10.5 dlsym函數:在動態庫文件中查找函數
10.6 openlog函數:打開記錄信息
10.7 regcomp函數:編譯正則表達式
10.8 regerror函數:編譯錯誤判斷函數
10.9 regexec函數:執行正則匹配
10.10 regfree函數:釋放正則模式串資源
10.11 syslog函數:輸出記錄信息
第11章 時間函數
11.1 asctime函數:字元串時間操作函數
11.2 clock函數:計算運行時間函數
11.3 ctime函數:字元串時間函數
11.4 difftime函數:計算時間差函數
11.5 ftime函數:取得系統時間
11.6 gettimeofday函數:取得系統當前時間
11.7 gmtime函數:日歷時間格式函數
11.8 localtime函數:獲得當前系統時間
11.9 mktime函數:系統時間轉換函數
11.10 settimeofday函數:系統時間設置函數
11.11 strftime函數:時間格式化輸出函數
11.12 time函數:獲得系統當前時間
11.13 tzset函數:設置系統時區變數tzname
第12章 socket相關函數
12.1 accept函數:處理socket請求函數
12.2 bind函數:將socket描述符與一個套介面綁定
12.3 connect函數:與遠程主機連接
12.4 endprotoent函數:結束網路協議的讀取函數
12.5 endservent函數:關閉文件/etc/services
12.6 gethostbyaddr函數:由IP獲得主機信息
12.7 gethostbyname函數:由主機名獲得主機信息
12.8 getprotobyname函數:由協議名獲取協議數據
12.9 getprotobynumber函數:由協議編號獲取協議數據
12.10 getprotoent函數:讀取文件/etc/rotoent中的網路協議數據
12.11 getservbyname函數:獲得網路服務協議數據
12.12 getservbyport函數:獲得網路服務協議數據
12.13 getservent函數:讀取主機網路服務數據
12.14 getsockopt函數:獲得指定socket描述符的狀態
12.15 herror函數:錯誤原因輸出函數
12.16 hstrerror函數:錯誤代碼查詢
12.17 htonl函數:地址位元組順序轉換
12.18 htons函數:地址位元組順序轉換
12.19 inet_addr函數:網路地址類型轉換
12.20 inet_aton函數:網路地址類型轉換
12.21 inet_ntoa函數:網路地址類型轉換
12.22 listen函數:網路socket監聽
12.23 ntohl函數:地址位元組順序轉換
12.24 ntohs函數:地址位元組順序轉換
12.25 recv函數:接收消息
12.26 recvfrom函數:接收消息
12.27 recvmsg函數:多緩沖讀取數據
12.28 send函數:向遠程主機發送數據
12.29 sendto函數:發送數據到遠程主機
12.30 setprotoent函數:打開網路協議文件
12.31 setservent函數:打開網路服務文件
12.32 setsockopt函數:設置socket描述符的狀態
12.33 shutdown函數:結束socket套接字
12.34 socket函數:創建網路套接字
第13章 字元測試函數
13.1 isalnum函數:判斷字元是否為英文字母或數字
13.2 isalpha函數:判斷字元是否為英文字母
13.3 isascii函數:判斷字元是否為ASCII字元
13.4 isblank函數:判斷字元是否為空白字元
13.5 iscntrl函數:判斷字元是否為ASCII的控制字元
13.6 isdigit函數:判斷字元是否為阿拉伯數字
13.7 isgraph函數:判斷字元是否為可列印字元
13.8 islower函數:判斷字元是否為小寫英文字母
13.9 isprint函數:判斷字元是否為可列印字元
13.10 isspace函數:判斷字元是否為空格字元
13.11 ispunct函數:判斷字元是否為標點符號
13.12 isupper函數:判斷字元是否為大寫英文字母
13.13 isxdigit函數:判斷字元是否為十六進制數字
第14章 數據轉換函數
14.1 atof函數:將字元串轉換成浮點數
14.2 atoi函數:將字元串轉換成整數
14.3 atol函數:將字元串轉換成長整數
14.4 ecvt函數:將浮點數轉換成字元串
14.5 fcvt函數:將浮點數轉換成字元串
14.6 gcvt函數:將浮點數轉換成字元串
14.7 strtod函數:將字元串轉換成浮點數
14.8 strtol函數:將字元串轉換成長整數
14.9 strtoul函數:將字元串轉換成無符號長整數
14.10 toascii函數:將整數轉換成合法的ASCII字元
14.11 tolower函數:將大寫字母轉換成小寫字母
14.12 toupper函數:將小寫字母轉換成大寫字母
第15章 字元串處理函數
15.1 bcmp函數:比較兩塊內存中的內容
15.2 b函數:復制內存中的內容
15.3 bzero函數:將一塊內存內容全清零
15.4 ffs函數:在一個整數中查找第一個值為真的位
15.5 index函數:查找字元串中第一個出現的指定字元
15.6 memccpy函數:復制內存中的內容
15.7 memchr函數:在一塊內存指定范圍查找一個指定字元
15.8 memcmp函數:比較內存中存放的內容
15.9 memcpy函數:復制一塊內存內容到另一塊中
15.10 memfrob函數:對某個內存區重新編碼
15.11 memmove函數:復制內存內容
15.12 memset函數:將某值填入到一塊內存區域
15.13 rindex函數:查找字元串中最後一個出現的指定字元
15.14 strcasecmp函數:忽略大小寫比較字元串
15.15 strcat函數:將一個字元串連接另一字元串的尾部
15.16 strchr函數:查找字元串中指定字元
15.17 strcmp函數:比較兩個字元串
15.18 strcoll的函數:根據當前環境信息來比較字元串
15.19 strcpy函數:復制一個字元串的內容到另一個字元串中
15.20 strcspn函數:計算字元串中由非指定字元集字元組成的子字元串的長度
15.21 strp函數:復制字元串內容
15.22 strfry函數:隨機重組一個字元串
15.23 strlen函數:返回字元串長度
15.24 strncasecmp函數:忽略大小寫比較兩個字元串
15.25 strncat函數:將一個字元串的前n個字元連接到另一字元串的尾部
15.26 strncmp函數:比較兩個字元串
15.27 strncpy函數:復制字元串
15.28 strpbrk函數:查找字元串中第一個出現的指定字元
15.29 strrchr函數:查找字元串中最後一個出現的指定字元
15.30 strspn函數:計算字元串中由指定字元集字元組成的子字元串的長度
第16章 數學計算函數
16.1 abs函數:計算整數的絕對值
16.2 acos函數:計算反餘弦的值
16.3 asin函數:計算反正弦的值
16.4 atan函數:計算反正切的值
16.5 atan2函數:計算反正切的值
16.6 ceil函數:計算大於或等於給定參數的最小整數
16.7 cos函數:計算餘弦的值
16.8 cosh函數:計算雙曲線的餘弦值
16.9 div函數:計算兩整數相除後的商和余數
16.10 exp函數:計算浮點數的指數
16.11 fabs函數:計算浮點數的絕對值
16.12 frexp函數:計算浮點數的尾數和指數
16.13 hypot函數:計算直角三角形斜邊長度
16.14 labs函數:計算長整數的絕對值
16.15 ldexp函數:計算浮點數與2的exp次方的積
16.16 ldiv函數:計算兩長整數相除後的商和余數
16.17 log函數:計算以e為底的對數值
16.18 log10函數:計算以10為底的對數值
16.19 modf函數:將浮點數分解為小數和整數兩部分
16.20 pow函數:計算次方值
16.21 sin函數:取正弦的值
16.22 sinh函數:計算雙曲線的正弦值
16.23 sqrt函數:計算浮點數的平方根
16.24 tan函數:計算角度的正切值
16.25 tanh函數:計算雙曲線的正切函數值
第17章 隨機數及數據加密函數
17.1 crypt函數:對字元串使用DES演算法編碼
17.2 drand48函數:產生一個正的隨機浮點數
17.3 erand48函數:產生一個正的隨機浮點數
17.4 initstate:建立隨機數狀態數組
17.5 jrand48函數:產生一個長整型的隨機數
17.6 lcong48函數:設置48位運算的隨機數種子
17.7 lrand48函數:產生一個正的長整型隨機數
17.8 mrand48函數:產生一個長整型隨機數
17.9 nrand48函數:產生一個正的長整數隨機數
17.10 rand函數:產生偽隨機數
17.11 random函數:產生隨機數
17.12 seed48函數:設置48位運算的隨機數種子
17.13 setstate函數:建立隨機數狀態數組
17.14 srand函數:設置隨機數種子
17.15 srand48函數:設置48位運算的隨機數種子
17.16 srandom函數:設置隨機數種子
17.17 getpass函數:取得用戶輸入密碼字元串
第18章 數據結構函數
18.1 bsearch函數:在有序數組中二分查找數據
18.2 hcreate函數:建立哈希表
18.3 hdestroy函數:刪除哈希表
18.4 hsearch函數:在哈希表中查找關鍵數據
18.5 lfind函數:線性搜索
18.6 lsearch函數:線性搜索
18.7 qsort函數:使用快速排序法排列數組
18.8 tdelete函數:從二叉樹中刪除數據
18.9 tfind函數:搜索二叉樹
18.10 tsearch函數:搜索二叉樹
18.11 twalk函數:遍歷二叉樹
第19章 其他函數
19.1 getopt函數:分析命令參數
19.2 isatty函數:判斷文件描述符是否為終端
19.3 pselect函數:多路轉接I/O
19.4 select函數:多路I/O轉接
19.5 ttyname函數:返回終端機的名稱
附錄A Linux函數的首字母索引
附錄B Linux指令的首字母索引

『柒』 Linux下signal信號匯總

Linux下signal信號匯總
SIGHUP 1 /* Hangup (POSIX). / 終止進程 終端線路掛斷
SIGINT 2 /
Interrupt (ANSI). / 終止進程 中斷進程 Ctrl+C
SIGQUIT 3 /
Quit (POSIX). / 建立CORE文件終止進程,並且生成core文件 Ctrl+
SIGILL 4 /
Illegal instruction (ANSI). / 建立CORE文件,非法指令
SIGTRAP 5 /
Trace trap (POSIX). / 建立CORE文件,跟蹤自陷
SIGABRT 6 /
Abort (ANSI). /
SIGIOT 6 /
IOT trap (4.2 BSD). / 建立CORE文件,執行I/O自陷
SIGBUS 7 /
BUS error (4.2 BSD). / 建立CORE文件,匯流排錯誤
SIGFPE 8 /
Floating-point exception (ANSI). / 建立CORE文件,浮點異常
SIGKILL 9 /
Kill, unblockable (POSIX). / 終止進程 殺死進程
SIGUSR1 10 /
User-defined signal 1 (POSIX). / 終止進程 用戶定義信號1
SIGSEGV 11 /
Segmentation violation (ANSI). / 建立CORE文件,段非法錯誤
SIGUSR2 12 /
User-defined signal 2 (POSIX). / 終止進程 用戶定義信號2
SIGPIPE 13 /
Broken pipe (POSIX). / 終止進程 向一個沒有讀進程的管道寫數據
SIGALARM 14 /
Alarm clock (POSIX). / 終止進程 計時器到時
SIGTERM 15 /
Termination (ANSI). / 終止進程 軟體終止信號
SIGSTKFLT 16 /
Stack fault. /
SIGCLD SIGCHLD /
Same as SIGCHLD (System V). /
SIGCHLD 17 /
Child status has changed (POSIX). / 忽略信號 當子進程停止或退出時通知父進程
SIGCONT 18 /
Continue (POSIX). / 忽略信號 繼續執行一個停止的進程
SIGSTOP 19 /
Stop, unblockable (POSIX). / 停止進程 非終端來的停止信號
SIGTSTP 20 /
Keyboard stop (POSIX). / 停止進程 終端來的停止信號 Ctrl+Z
SIGTTIN 21 /
Background read from tty (POSIX). / 停止進程 後台進程讀終端
SIGTTOU 22 /
Background write to tty (POSIX). / 停止進程 後台進程寫終端
SIGURG 23 /
Urgent condition on socket (4.2 BSD). / 忽略信號 I/O緊急信號
SIGXCPU 24 /
CPU limit exceeded (4.2 BSD). / 終止進程 CPU時限超時
SIGXFSZ 25 /
File size limit exceeded (4.2 BSD). / 終止進程 文件長度過長
SIGVTALRM 26 /
Virtual alarm clock (4.2 BSD). / 終止進程 虛擬計時器到時
SIGPROF 27 /
Profiling alarm clock (4.2 BSD). / 終止進程 統計分布圖用計時器到時
SIGWINCH 28 /
Window size change (4.3 BSD, Sun). / 忽略信號 窗口大小發生變化
SIGPOLL SIGIO /
Pollable event occurred (System V). /
SIGIO 29 /
I/O now possible (4.2 BSD). / 忽略信號 描述符上可以進行I/O
SIGPWR 30 /
Power failure restart (System V). /
SIGSYS 31 /
Bad system call. */
SIGUNUSED 31

有兩個信號可以停止進程:SIGTERM和SIGKILL。 SIGTERM 比較友好,進程能捕捉這個信號,根據您的需要來關閉程序。

在關閉程序之前,您可以結束打開的記錄文件和完成正在做的任務。在某些情況下,假如進程正在進行作業而且不能中斷,那麼進程可以忽略這個SIGTERM信號。

對於 SIGKILL 信號,進程是不能忽略的。這是一個 「我不管您在做什麼,立刻停止」的信號。假如您發送SIGKILL信號給進程,Linux就將進程停止在那裡。

sigaddset 將信號signo 加入到信號集合之中;
sigdelset 將信號從信號集合中刪除;
sigemptyset 函數初始化信號集合set,將set 設置為空;
sigfillset 也初始化信號集合,只是將信號集合設置為所有信號的集合;

閱讀全文

與linuxcsignal相關的資料

熱點內容
手機谷歌打不開網站怎麼辦 瀏覽:110
燈控台編程好了怎麼使用 瀏覽:342
如何用金山毒霸切斷網路連接 瀏覽:873
怎麼設置文件打開密碼怎麼設置 瀏覽:5
網路小說用什麼寫 瀏覽:956
擴展名為rm的文件如何打開 瀏覽:707
導入android項目沒有rjava 瀏覽:899
帶英文和數字的文件名 瀏覽:843
黃山數控編程培訓在哪裡 瀏覽:111
win10俠盜5無限讀取 瀏覽:557
js工廠模式 瀏覽:927
iphone6s清理緩存 瀏覽:465
ug編程怎麼選不上字體 瀏覽:435
pc文件加密哪個好 瀏覽:393
蘋果軟體更新4位密碼 瀏覽:96
手機如何將文件弄成文件夾 瀏覽:275
swordigo第四關 瀏覽:996
t420win10網卡驅動 瀏覽:805
ps怎麼打開dxf文件怎麼打開 瀏覽:698
ps格式文件打開軟體 瀏覽:371

友情鏈接