Linux編程筆記

 

協議族

地址族

描述

PF_UNIX

AF_UNIX

UNIX本地域協議族

PF_INET

AF_INET

TCP/IPV4

PF_INET6

AF_INET6

TCP/IPV6

 

宏PF_* 和 AF_* 都定義在:/usr/include/x86_64-linux-gnu/bits/socket.h

 

accept 只是從監聽隊列中取出連接而不論連接處於何種狀態(客戶端網絡異常,關閉客戶端)

 

send,recv 設置的flags參數只是本次生效

SetSocketpt系統調用永久性的修改socket的某些屬性

 

TCP 讀寫: recv send

UDP讀寫: recvfrom sendto

通用: recvmsg sendmsg

 

 

帶外標記:

內核通知的兩種方式:

1、I/O 複用產生的異常事件

2、sigurg 信號

 

int sockatmark(int socket) : 判斷下一個讀到的數據是否是

帶外數據。返回值爲1:是 ;0 :不是

 

往fd[1]寫入的數據可以從fd[0]讀出來

fd[0]: 只能用於從管道讀出數據

fd[1]: 只能用於往管道寫入數據

 

信號是由用戶系統或者進程發送給目標進程的信息

 

要始終清楚的知道進程在每個運行時刻的信號掩碼以及如何適當處理捕獲到的信號,在多進程或者線程環境中我們要以進程或者線程爲單位來處理信號和信號掩碼。我們不能設想新創建的進程或者線程具有和父進程、主進程完全相同的信號特徵,比如fork調用產生的子進程將繼承父進程的信號掩碼,但是具有一個空的掛起信號集

 

SIGHUP:

當掛起的進程的控制中端時(控制中端掛起),SIGHUP信號將被觸發對於沒有控制終端的網絡後臺程序,它們通常利用SIGHUP信號來強制服務器重讀配置文件

 

SIGPIPE:

默認情況下在一個讀端關閉的管道或者socket連接中寫數據將引發SIGPIPE信號。程序接受到SIGPIPE信號的默認行爲是結束進程

 

SIGURG:
⛳通知應用程序外帶外數據到達

 

socketpair 產生的管道 是雙向的 fd[0]和fd[1]既可以寫數據也可以讀數據

 

epoll:

對於文件描述符的操作有兩種模式:
LT(level trigger 電平觸發):多次通告

ET(edge trigger 邊沿觸發):一次通告

 

int epoll_create(int size)

size參數並不起作用;

該函數返回的文件描述符將用於其它所有epoll系統調用的第一個參數,以 指定要訪問的內核事件

 

int epoll_ctl (int epfd, int op, int fd, struct epoll_even *event)

fd 參數:要操作的文件描述符

op參數: 指定操作類型

event參數:指定事件

表示epoll事件類型的宏是在poll對於的宏前加上 "E” 但是epoll 有兩個額 外事件

EPOLLET: 邊沿觸發

EPOLLONSHOT:一個socket連接在任一時刻都只能被一個線程處理

 

SIGCHLD:子進程狀態發生變化(退出/暫停)

SIGTERM:終止進程,kill 命令默認發送的信號就是SIGTERM

 

SIGINT:鍵盤輸入以中斷進程(ctrl+C)

 

SIGPIPE: 往讀端被關閉的管道或者socket連接中寫入數據

 

信號兩種其他處理方式:

SIG_IGN : 表示忽略目標信號

SIG_DFL:表示使用信號的默認處理方式

 

pthread_create

pthread_detech:函數直接設置爲脫離線程

脫離了與其它線程同步的線程稱爲“脫離線程”

 

EPOLLRDHUP:tcp連接被對方關閉或者對方關閉了寫操作。它由GUN引入

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章