原创 Linux C 時間輪:對基於排序鏈表的定時器進行改進

摘自:Linux 高性能服務器編程 基於排序鏈表的定時器存在一個問題:添加定時器的效率偏低。而時間輪可以解決這個問題 上圖所示的時間輪內,(實線)指針指向輪子上的一個槽(slot)。它以恆定的速度順時針轉動,每轉動一下就指向下一

原创 動態內存分配和釋放:malloc,realloc,calloc,free函數

以下三個內存分配函數的返回值都是void*,void*可以強制轉化爲其他類型的指針 malloc函數 #include <stdlib.h> void *malloc( size_t size ); 該函數在堆區分配一個size

原创 Linux IPC 信號量:PV原語,PV操作,函數semget,函數semop、函數semctl、生產者和消費者模型

Linux IPC 信號量什麼是信號量信號量的分類原語信號量PV操作的原語描述P原語(申請資源)操作V原語(釋放資源)操作PV原語的執行順序PV原語如何實現互斥訪問System V IPC:信號量函數 semget()函數semo

原创 使用qsort對結構體指針數組根據compare規則進行排序

有一個記錄學生信息的文件,每一行記錄一名學生的信息,格式如下: 學號\t 姓名\t 性別\t 分數 1\t 分數 2\t 分數 3\n. 要求: (1) 讀取文件的內容, 串成一個鏈表。 (2) 按照總分遞減排序將結果保存到原文件

原创 Linux IPC 管道:標準流管道,無名管道(PIPE),命名管道(FIFO)

Linux IPC 管道標準流管道函數popen()函數pclose()popen_ls.cpopen_read_print.cprint.cpopen_write_add.cadd.c無名管道PIPE管道通訊原理無名管道的特點函

原创 Linux IPC 信號 kill,signal,sigaction,sigprocmask,sigpending信號處理機制

LINUX IPC 信號什麼是信號發送信號信號處理方式中斷系統調用signal 信號處理機制signal.csignal_sleep_recover.csignal_read_block.csignal_two_kind.csig

原创 Linux C語言 線程池模型:線程池的創建、銷燬、擴容、減容,模擬線程處理任務過程,加鎖、解鎖、回調函數

線程池(英語:thread pool):一種線程使用模式。線程過多會帶來調度開銷,進而影響緩存局部性和整體性能。而線程池維護着多個線程,等待着監督管理者分配可併發執行的任務。這避免了在處理短時間任務時創建與銷燬線程的代價。線程池不

原创 Linux IPC 共享內存 ,System V 共享內存機制: shmget,shmat,shmdt,shmctl

共享內存機制System V 共享內存機制ftok()函數ftok.cshmget()函數shmget.cshmat()函數shmat.cshmdt()函數shmdt.cshmctl()函數shmctl_ipc_state.csh

原创 Linux IPC 消息隊列 創建訪問 msgget,發送信息 msgsnd,接受信息 msgrcv,刪除 msgctl

System V IPC 機制:消息隊列消息隊列函數 msgget()msgget.c函數msgsnd()和函數msgrcv()msgget_msgsnd.cmsgget_msgrcv.cmsgget_msgrcv_nowait.

原创 Liunx C 進程池模型:實現多進程併發傳輸文件服務 1.0

基本思路如下圖所示: 服務器端代碼 process_pool.h頭文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.

原创 linux 文件及目錄操作 chmod,getcwd,chdir,mkdir,rmdir,opendir,readdir,seekdir,telldir、closedir、stat、fstat

改變目錄或文件的訪問權限: #include <sys/stat.h> int chmod(const char* path, mode_t mode); //path 參數指定的文件被修改爲具有 mode 參數給出的訪問權

原创 Liunx C 線程池模型:實現多線程併發傳輸文件服務 2.0

源代碼如下: server端 head.h #ifndef __HEAD_H__ #define __HEAD_H__ #include <stdio.h> #include <stdlib.h> #include <string

原创 Liunx C 線程池模型:實現多線程併發傳輸文件服務 1.0

源代碼如下: 服務器端: head.h #ifndef _HEAD_H_ #define _HEAD_H_ #include <stdio.h> #include <stdlib.h> #include <string.h> #i

原创 Linux 信號再探:統一事件源,信號的處理機制,異步—同步

信號是一種異步事件,信號處理函數和程序的主循環是兩條不同的執行路線。很顯然,信號處理函數需要儘可能快地執行完畢,以確保該信號不會被屏蔽(爲了避免一些競態條件,信號在處理期間,系統不會再次觸發它)太久。 一種典型地解決方案是:把信號

原创 Linux 內存映射mmap原理分析

一、內存映射簡介 內存映射,簡而言之就是將用戶空間的一段內存區域映射到內核空間,映射成功後,用戶對這段內存區域的修改可以直接反映到內核空間,同樣,內核空間對這段區域的修改也直接反映用戶空間。那麼對於內核空間<---->用戶空間兩者