UnixC第十一天

2021-09-10 06:21:37 字數 2778 閱讀 9041

回憶昨天內容

一、訊號阻塞

sigprocmask(2) sigset_t

訊號阻塞和訊號忽略的區別

可靠訊號  不可靠

訊號丟失

二、獲取程序的未決訊號集

從未決訊號集中找未決訊號

sigpending(2)

什麼是未決訊號?

三、訊號從產生到處理的整個過程

四、system v ipc 

訊息佇列  

獲取乙個system v 的key值 ftok(3)

訊息佇列

使用key值獲取訊息佇列的id msgget(2)

使用訊息佇列的id從訊息佇列獲取訊息  或者向訊息佇列傳送訊息

caller define

struct msgbuf    

訊息的型別 mtype

接收 msgrcv (2)   拷貝  移除

傳送 msgsnd (2)

檢視訊息  ipcs命令

共享記憶體

訊號量集

今天的內容:

一、共享記憶體

使用鍵值獲取共享記憶體的id

shmget(2)

#include

#include

int shmget(key_t key, size_t size, int shm***);

功能:分配乙個共享記憶體段

引數:  key  ftok(3)的值

size 指定了共享記憶體段的大小

shm***

ipc_creat

ipc_excl

mode指定了共享記憶體段的許可權

返回值:  成功  返回共享記憶體段的id

失敗  -1  errno被設定

編寫**獲取乙個共享記憶體的id  **參見 shmget.c

將共享記憶體段關聯到程序的虛擬位址空間

shmat(2)    shmdt(2)

#include

#include

void *shmat(int shmid, const void *shmaddr, int shm***);

功能:將共享記憶體段附加到程序虛擬位址空間

引數:shmid  指定了要操作的共享記憶體段的id

shmaddr 附加到程序虛擬位址的位址  null

shm***   0

返回值:成功 返回程序的虛擬位址  共享記憶體段附加的位址

錯誤 (void*) -1  errno被設定

int shmdt(const void *shmaddr);

功能:解除關聯

引數:shmaddr 指定了共享記憶體段在程序的附加位址

返回值:成功  0

錯誤 -1   errno被設定

如何檢視本機的ip位址和mac位址?

sudo ifconfig

ip位址(邏輯位址  4個位元組)    mac位址(實體地址  6個位元組)

127.0.0.1  本機環迴位址   用來測試網路裝置工作是不是正常。

ip位址   程序監聽的埠

0~65533

1024   以下不要使用  

ip位址  有兩部分組成   網路部分   主機部分

子網掩碼

172.168.1.129

255.255.255.0

172.168.1.129/24    子網掩碼前24位全1  與網段做與運算為網路號

172.168.1.0   0~255  全0不能用  網路號   全1不能用  本網段的廣播位址

172.168.1.129/25

255.255.255.128

172.168.1.128  是網路號   最多126臺主機

172.168.1.126/25

172.168.1.0    網路號

子網掩0碼&(與運算)ip位址=網路標識 (網路號)

如果網路標識一樣,那麼屬於同一網段 

集線器  只是對電流放大  分用   物理層  

交換機  交換的是網幀   鏈路層

路由器  交換的是ip報文  網路層

測試自己的裝置是否正常

ping 127.0.0.1

ping 目標ip

資料的傳輸

跨網段資料的傳輸

區域網內部資料的傳輸

每台機器都有自己的路由表。

route

每台機器還有自己的arp表

arp  -a

三 基於tcp的程式設計模型

tcp  udp

tcp比較安全可靠的傳輸  傳輸資料之前需要建立連線。開銷比較大。傳輸效率就比較低。

udp 不需要建立連線,象傳送快遞一樣。

面向資料報的  不可靠的  傳輸效率很高。

所謂的可靠和不可靠是相對的。

客戶端和伺服器端的連線。

建立連線的過程。

pa.c

#include#include#include#include#includeint main(int argc,char *ar**)

會發生段錯誤   segmentation fault

pb.c

#include#include#include#include#includeint main(int argc,char *ar**)
shmget.c

#include#include#include#includeint main(int argc,char *ar**)

第十一天作業

第一題 import time import random deffoo print 開始執行。time.sleep random.uniform 1,3 print 執行完畢 return 都結束了 print foo 第二題 import time import random deffoo pr...

python第十一天

函式總結 def func a,b print a,b return a b 四個組成部分 函式名 呼叫函式的依據 函式體 執行函式邏輯的 引數列表 為函式提供內部資源 返回值 將函式執行結果返回給外界 返回值 1 空返回 沒有return或空return 2 一鍵返回 3 多值返回 裝有多個值的元...

實習第十一天

subversion svn 是乙個開源的版本控制系統,也就是說 subversion 管理著隨時間改變的資料。這些資料放置在乙個 資料檔案庫 repository 中。這個檔案庫很像乙個普通的檔案伺服器,不過它會記住每一次檔案的變動。這樣你就可以把檔案恢復到舊的版本,或是瀏覽檔案的變動歷史。日常開...