原创 Linux中的上下文切換

1.CPU上下文:程序計數器、CPU狀態(一些寄存器) 2.進程上下文:虛擬內存、用戶堆棧 3.內核上下文:內核堆棧、寄存器 進程切換需要1、2、3 系統調用需要1、3 中斷需要1、3 參考: https://segmentfau

原创 不用第三個變量交換兩個整數

https://blog.csdn.net/samjustin1/article/details/52138733

原创 子進程從父進程繼承和不繼承的東西

由子進程自父進程繼承到: 進程的資格(真實(real)/有效(effective)/已保存(saved) 用戶號(UIDs)和組號(GIDs)) 環境(environment) 堆棧 內存 打開文件的描述符(注意對應的文件的位置由

原创 在構造函數和析構函數拋出異常會發生什麼

https://www.cnblogs.com/KevinSong/p/3323372.html 1.析構函數拋異常,會導致未定義行爲。若非拋不可,可以用try catch吞下 2.構造函數可以拋異常,但是拋之前先釋放資源,另外構

原创 獲取結構體內成員的偏移值

1、包含頭文件#include <stddef.h>,調用函數offsetof(struct s, i)來實現。 2、使用(int)&(((s*)0)->i)的形式。

原创 c語言中的typeof

和c++中的decltype關鍵字一樣

原创 父子進程與殭屍進程

情況1:父進程比子進程先結束。 當子進程結束時,檢查父進程的狀態,得知父進程已結束,則把父進程重置爲init,由其幫忙收屍 情況2:子進程先結束 子進程先結束,發現父進程仍在運行,那麼就向父進程發送信號SIGCHLD, 對於父進程

原创 關於c++的wait,notify_one,notify_all

一般用法: std::unique_lock<std::mutex> m_lock(m_mutex); if(....){ m_cond.wait(m_lock); } m_lock:獲取互斥量(鎖); m_cond.wai

原创 不要對監聽的socket指定EPOLLONESHOT參數

EPOLLONESHOT:註冊事件後,只觸發一次,需要重新調用epoll_ctl才能繼續觸發。

原创 c++ string 常見接口

https://www.jianshu.com/p/2e68b91de235

原创 父子進程輪流寫同一個文件

因爲父子進程共享同一個文件描述符,父進程寫"aaa",子進程寫"bbb",那麼可能會出現兩種情況 1.使用write,因爲不帶緩衝,文件可能是"aaabbb" 2.使用fwrite,因爲帶緩衝,文件可能是"aababb" 參考:h

原创 服務器最多能處理多少個連接

和服務器的內存、能打開的文件描述符數目有關。

原创 內核級線程和用戶級線程

參考: https://www.cnblogs.com/feng9exe/p/7890934.html 1.核支持線程是OS內核可感知的,而用戶級線程是OS內核不可感知的。 2.用戶級線程的創建、撤消和調度不需要OS內核的支持,是

原创 write和fwrite的區別

https://www.cnblogs.com/ldp-web/archive/2011/10/21/2220180.html

原创 在進程之間傳遞文件描述符

https://blog.csdn.net/sparkliang/article/details/5486069