原创 C++11模版元編程:如何判斷一個類型是完整類型(complete type)

什麼是完整類型(complete type)? 要明白這個概念不如先從不完整類型(incomplete type)開始. 簡單說,如果在編譯期編譯器能計算出一個類型的size,那麼它就是一個完整類型,否則就是不完整類型。 比如如下

原创 erpc(EmbeddedRPC)入門筆記

RPC 最近在忙一個IOT設備的項目,想設計一個通信系統通過串口控制設備(freertos)的運行。按照傳統的設計思路,先要定義一套串口通信協議,在這套協議中傳輸層協議、應用層協議一個都不能少。每一層協議都要自己實現。數據編碼/解

原创 c++11:如何判斷std::function對象相同?

我們知道std::function的實質就是個函數指針,但在c++11中std::function並沒有實現操作符==(要到C++20才實現),所以我們無法使用==操作符來判斷兩個std::function對象是否相等,雖然我們明

原创 c++11:枚舉類型(enum)的前向聲明(forward declaration)

在C++11之前,C++標準是不支持枚舉類型的前向聲明的。我說出這個結論,肯定有用msvc的童鞋不願意了:口胡,MSVC明明就可以對枚舉類型前向聲明,下面這樣的前向聲明在MSVC下好好的,沒有任何問題。 enum E; 是哦,你

原创 NV21轉RGB或BGR的java實現和C實現

NV21是android平臺攝像設備輸出的標準格式,經常需要將它轉爲RGB或BGR格式, 以下是NV21格式圖像矩陣轉爲RGB/BGR的實現代碼,代碼在windows/linux/android平臺測試通過. NV21格式的具體定

原创 nanohttpd:實現跨域(CORS)請求

NanoHTTPD是一個輕量級的HTTP服務器,可以很方便地嵌入到Java程序中。所以在android平臺上有廣泛的使用。 NanoHTTPD默認是不支持訪問跨域(CORS)請求的。如果希望自己的NanoHTTPD服務支持CORS

原创 linux shell:判斷git工作文件夾是否乾淨(clean)

git diff 如果你不關注未納入版本控制的文件(untracked)的文件,使用git diff就可以判斷git工作文件夾是否乾淨,如果是乾淨的,git diff將沒有輸出,否則輸出修改的文件的差異 #!/bin/bash i

原创 linux:根據主進程查找子進程

如下是我的項目中創建的一個java系統服務在通過systemctl status顯示的服務狀態 $ systemctl status facelog ● facelog.service - facelog service L

原创 shell:獲取git當前分支或tag

shell下如何獲取git的當前所在分支名或tag呢? 爲了解決這個小問題,我之前是走了彎路的,之前我簡單的想法就是解析git branch輸出的內容從中獲取 分支或tag名。 如下代碼, # 返回$1指定的git項目的當前分支(

原创 msys2:shell下獲取node版本號:

最近在寫shell腳本時需要獲取node的版本號,代碼很簡單node --version | sed 's/^v//',在linux(ubuntu)下執行都沒有任何問題 但是在windows下的git-bash(基於msys2)

原创 linux/bash:用數組模擬棧(FILO)的封裝

linux shell中是沒有隊列這個類型的,如果需要用到隊列模型,就需要自己實現,以下是用數組模擬一個棧(FILO)的操作 #!/bin/bash # 向棧中添加一個元素 # $1 棧變量名 # $2 添加到棧中的元素 func

原创 linux shell 獲取java版本號

獲取java版本號 $ java -version 2>&1 | sed '1!d' | sed -e 's/"//g' | awk '{print $3}' 1.8.0_222 獲取java類型(openjdk)及版本號 $

原创 linux/shell:列出所有ip地址及對應的物理網卡

基本的思路就是用route命令列出所有的網卡名,然後再用ifconfig配合字符串匹配找出對應的ip地址,示例如下: #!/bin/bash function ips(){ local nics=$(route -n | gre

原创 linux/bash:map作爲參數傳遞給function

在linux bash中map是作爲數組處理的,不能作爲參數直接傳遞函數,如果一定要傳遞給函數,要做一些變通處理,示例如下: #!/bin/bash function test_map() { # 獲取map變量的聲明字符串

原创 linux:dialog表單提交示例

dialog是個linux命令行的ui顯示工具,可以在命令行顯示更加友好的用戶界面,系統如果沒有安裝需要手工安裝: sudo apt-get install dialog 以下是在命令顯示錶單的示例: #!/bin/bash #