Time of Update: 2018-12-07
在awk中執行外部命令1、藉助system/getline刪除awk '{cmd="rm "$0;system(cmd)}' filename awk '{cmd="rm "$0;cmd|getline }' filenameman awk裡面有關於getline的說明。2、awk '{system("wget -O - "url" | grep "ext" " | getline var) }' '{print var}'system
Time of Update: 2018-12-07
在寫代碼的時候,經常會用到讀取系統時間的函數。localtime函數不是安全執行緒的。如果在多線程裡調用localtime函數,很可能會出現問題。多線程應用裡面,應該用localtime_r函數替代localtime函數,因為localtime_r是安全執行緒的。struct tm *localtime(const time_t *clock);struct tm* localtime_r( const time_t* timer, struct tm* result
Time of Update: 2018-12-07
修複刪除檔案1、debugfs開啟,剛剛被刪除檔案所在的分區open /dev/sda22、用ls 加-d參數顯示剛剛刪除檔案所在的目錄ls -d /root/data顯示有<>角括弧的就是我們要找的檔案Inode 號 執行logdump –I <393289>記下得到的block號b_num。3、推出debugfs4、dd if=/dev/sda2 op=/tmp/tmp.file bs=4096 count=1 skip=b_num查看是否恢複成功。原文http://
Time of Update: 2018-12-07
tcpdump抓取TCP標識位按每8位組算,TCP的標誌位位於第13個8位組中,如下,第一行一共32位是0 - 3個8位組,第二行是4-7八位組,第三行是8-11八位組,data offset +reserved的前四個是第12個8位組,reserved中的後2位+6個標誌位是第13個八位組。以下TCP前序因此第13個八位組結構為- - + + + + + +前面2個是保留的,都為0,後面的6個根據不同情況有不同值,例如syn 包 則為00 0 0 0 0 1
Time of Update: 2018-12-07
volatile 影響編譯器編譯的結果,指出,volatile 變數是隨時可能發生變化的,與volatile變數有關的運算,不要進行編譯最佳化,以免出錯,(VC++ 在產生release版可執行碼時會進行編譯最佳化,加volatile關鍵字的變數有關的運算,將不進行編譯最佳化。)。 例如: volatile int i=10; int j = i; ... int k = i; volatile
Time of Update: 2018-12-07
1、查看命令[root@www ~]# sysctl -a | grep local或cat /proc/sys/net/ipv4/ip_local_port_range2、修改連接埠範圍1)永久修改vi /etc/sysctl.conf 添加下面一行:net.ipv4.ip_local_port_range = 1024 65535 然後執行:sysctl -p 生效。2)臨時修改echo 1024 65535 >
Time of Update: 2018-12-07
#define likely(x) __builtin_expect((x),1)#define unlikely(x) __builtin_expect((x),0)__builtin_expect() 是 GCC (version >= 2.96)提供給程式員使用的,目的是將“分支轉移”的資訊提供給編譯器,這樣編譯器可以對代碼進行最佳化,以減少指令跳轉帶來的效能下降。__builtin_expect((x),1) 表示 x 的值為真的可能性更大;__builtin_expect((x)
Time of Update: 2018-12-07
awk 數組執行個體awk的數組,一種關聯陣列(Associative Arrays),下標可以是數字和字串。因無需對數組名和元素提前聲明,也無需指定元素個數 ,所以awk的數組使用非常靈活。首先介紹下幾個awk數組相關的知識點:<1>建立數組array[index] = value :數組名array,下標index以及相應的值value。<2>讀取數組值{ for (item in array) print array[item]} # 輸出的順序是隨機的{for(
Time of Update: 2018-12-07
* Remove surrounding whitespace from a std::string.* @param s The string to be modified.* @param t The set of characters to delete from each end* of the string.* @return The same string passed in as a parameter reference.*/std::string& trim(std::
Time of Update: 2018-12-07
關於堆及記憶體配置點滴1. 無論是堆,還是棧都是對虛存的操作和管理。 2. 系統調用brk()和mmap()用來動態分配虛存空間,也就是表明這些虛存地址是合法的,訪問的時候,系統應為其分配實體記憶體,而不是報錯。 3. 堆的本質是動態申請的虛存空間。理論上可以用任何方式去管理這塊空間。但資料結構--"堆"是最常用的一種,所以這塊分配的空間常稱為被堆。 4. 和棧不一樣,堆的管理是在使用者函數庫中進行,malloc/free等函數是堆的入口。 5.
Time of Update: 2018-12-07
curl命令簡單使用下載檔案curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG批量下載curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG 續傳curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPGPOST上傳curl -d "user=nickwolfe&password=12345"
Time of Update: 2018-12-07
使expect指令碼傳回傳回值1、使用expect樣本:spawn $SPAWN_CMDexpect { -re "Enter password for new role:" { send "$PWPROMPT\n" exp_continue } -re "Enter it again:" { send "$PWPROMPT\n"
Time of Update: 2018-12-07
struct lingerTCP串連斷開的時候調用closesocket函數,有優雅的斷開和強制斷開兩種方式.那麼如何設定中斷連線的方式呢?是通過設定socket描述符一個linger結構體屬性。linger結構體資料結構如下:struct linger{int l_onoff;int l_linger;};有三種組合方式:第一種l_onoff =
Time of Update: 2018-12-07
調試core檔案當獲得了core檔案以後,就可以利用命令gdb進行尋找,參數一是應用程式的名稱,參數二是core檔案。也可以用-c來指定core檔案。如: gdb [paremeter] app [paremeter] /app.core然後輸入bt(backtrace)或者where找到錯誤發生的位置和相應的堆棧資訊。就可知道發生錯誤時的函數調用關係,然後可以使用up或者down查看上一條和下一條具體詳細資料。這樣便能對問題進行大概定位,然後看原始碼,進行分析。此外,還可以用 f 堆棧號
Time of Update: 2018-12-07
一、定義在 awk 中,數組是關聯陣列,它的特點是:1、 數組的下標可以是整數,也可以是負數甚至是字串2、 數組的下標可以不連續。Awk 的變數 IGNORECASE 的值不影響數組下標。當 awk 建立一個數組的時候,如果沒有指定下標,預設已連續整數作為下標,起始值是 1.Awk 的數組是什麼高效的,訪問一個元素的時間跟元素的數量無關。註: awk 的下標其實都是字串,如我們輸入的是數字 1 , awk 會自動的轉換為字串“ 1 ”。二、引用元素引用 awk
Time of Update: 2018-12-07
列印輸出tcp擁塞視窗在核心的函數tcp_getsockopt的代碼中,可以看到這個選項TCP_INFO,返回了幾乎所有的參數,同時還有其他的許多參數可以得到一些其他的資訊。具體每個參數的含義可以參考核心中的注釋。樣本#include <string> #include <string.h> #include <cstdlib> #include <ctime> #include
Time of Update: 2018-12-07
記憶體流失偵查工具valgrind1、安裝cd valgrind-3.2.3./configuremake;make install2、使用valgrind --tool=memcheck --leak-check=full
Time of Update: 2018-12-07
1970年1月1日0點1969年8月,貝爾實驗室的程式員肯湯普遜利用妻兒離開一個月的機會,開始著手創造一個全新的革命性的作業系統,他使用B編譯語言在老舊的PDP-7機器上開發出了Unix的一個版本。隨後,湯普遜和同事丹尼斯裡奇改進了B語言,開發出了C語言,重寫了UNIX,新版於1971年發布。那時的電腦作業系統是32位,時間用32位有符號數表示,則可表示 68 年,用32位無符號數表示,可表示136年。他們認為以 1970年 為時間 原點 足夠可以了。 因此,C 的 time 函數 就這麼定了,
Time of Update: 2018-12-07
GooglePerformance Tools簡介1、安裝a) 安裝libunwindlibunwind是一個用於解析程式調用棧的C++庫,由於glibc內建的棧復原功能在64位系統上有bug,因此googleperformance tools建議使用libunwind下載libunwind-0.99-beta.tar.gzcd $HOMEtarxzvf libunwind-0.99-beta.tar.gzmkdir libunwind-0.99-beta-buildcd libunwind-0
Time of Update: 2018-12-07
":x"和":wq"的真正區別,如下::wq 強制性寫入檔案並退出(存檔並退出 write%quite)。即使檔案沒有被修改也強制寫入,並更新檔案的修改時間。