原创 python使用原始套接字發送二層包(鏈路層幀)

發送端代碼: #!/usr/bin/python # -*- coding: UTF-8 -*- import socket import struct raw_socket = socket.socket(socket.PF

原创 URL安全的Base64算法

base64是取3個字節(24位)的數據強行組成4個字節(32位)的數據做爲一個分組,24位分成4個字節的話,每個字節分到6位,然後前面補兩位0,然後這個字節的值位索引去base64表找值。 1. 因爲前面補兩個0,那麼只有6位來算索引,

原创 linux c使用system調用shell腳本

system的原理其實就是調用fork創建子進程去執行shell命令,然後返回最後一條shell命令的狀態值。linux下man system可以看到返回值說明: 1.如果返回值等於-1就是system函數執行失敗,準確的說是f

原创 源碼安裝pip

今天本來要使用Twisted,但是公司的編譯環境使用的Gentoo,沒有yum,apt-get,我每次安裝python庫都是自己下載源碼用python setup.py來編譯安裝,安裝後的庫文件在/usr/lib64/python

原创 python使用epoll實現的服務端例子

#!/usr/bin/python # -*- coding: UTF-8 -*- import socket import select send_data = "hello world!" send_len = len(se

原创 docker -v :rw :ro

先引用官方文檔原話:If neither ‘rw’ or ‘ro’ is specified then the volume is mounted in read-write mode.(https://docs.docker.

原创 docker registry私有倉庫的一些錯誤解決辦法

Error response from daemon: login attempt to https://test.io:5000/v2/ failed with status: 401 Unauthorized 這種情況是用戶名

原创 2>/dev/null和>/dev/null 2>&1和2>&1 >/dev/null

標準輸入0    從鍵盤獲得輸入 /proc/self/fd/0 標準輸出1    輸出到屏幕(即控制檯) /proc/self/fd/1 錯誤輸出2    輸出到屏幕(即控制檯) /proc/self/fd/2 /de

原创 source命令的巧用

首先,通常用於重新執行剛修改的初始化文件,使之立即生效,而不必註銷並重新登錄。例如,當我們修改了/etc/profile文件,並想讓它立刻生效,而不用重新登錄,就可以使用source命令,如source /etc/profile。

原创 pipework給docker設置ip

pipework下載地址 解壓之後,有一個pipework文件,其實就是shell腳本。 1.創建啓動一個容器 docker run -it -d --name test_pipework --net=none centos ba

原创 pymongo連接超時的做法

通常我們連接mongo數據庫會這樣做: client = pymongo.MongoClient(host, port) 但是會發現一個問題,如果mongo連接不上,會在這裏阻塞很久。解決辦法可以看官方文檔http://api

原创 VS Code Remote Development

在Windows下編輯Linux代碼,並且有Linux下的系統接口,第三方dep庫的語法解析,代碼提示,自動補全,跳轉,用起來真香。困擾了Linux後臺開發人員多年的難題終極解決方案!要求VS Code版本在1.35.1以上。 1. 安裝

原创 epoll的ET和LT模式觸發場景

epoll有兩種事件模型: Level Triggered (LT) 水平觸發 socket接收緩衝區不爲空,有數據可讀,讀事件一直觸發 socket發送緩衝區不滿,可以繼續寫入數據,寫事件一直觸發 Edge Triggered (ET)

原创 宏定義的巧用

1. #用來標記參數是字符串 #define STRING(X) #X const char *str = STRING(test); cout << str << endl; 這裏str的內容就是"test" 2. ##用來連接參數

原创 makefile常用編譯選項

我們習慣創建一個環境變量文件Inc.mk來定義常用的變量 CC = gcc CXX = g++ -std=c++11 AR ?= ar ARFLAGS = -scurv RANLIB ?= ranlib CFLAGS ?= CXXFL