發表文章

目前顯示的是 10月, 2022的文章

字串連接:strcat()、strncat()

  比照 strcpy()與strncpy() ,做個筆記吧。順帶一提,一副貓樣的cat是concatenate的縮寫。 strncat() 函式宣告 char *strncat(char *dest, const char *src, size_t n); 測試範例 #include <stdio.h> #include <string.h> void main() { char src1[] = "abcd"; char src2[] = "123"; char arr[10]; int i, n; for (n = 0; n < sizeof(arr) - strlen(src1); n++) { memset(arr, '.', sizeof(arr)); strncpy(arr, src1, sizeof(src1)); printf("N = %d: ", n); strncat(arr, src2, n); for (i = 0; i < sizeof(arr); i++) { if (arr[i] == '\0') printf("%c ", '_'); else printf("%c ", arr[i]); } printf("\n"); } } 輸出如下: 顯示「.」代表未改變,保持原始值。 顯示「_」代表字串結尾字元「\0」。 N = 0: a b c d _ . . . . . N = 1: a b c d 1 _ . . . . N = 2: a b c d 1 2 _ . . . N = 3: a b c d 1 2 3 _ . . N = 4: a b c d 1 2 3 _ . . N = 5: a b ...

字串複製:strcpy()、strncpy()

  每次都為了有沒有包含字串結尾字元「\0」而煩惱,就做個筆記吧。 前言:sizeof()與strlen()   進入正題前,先看看字串長度,順便複習陣列和指標。 #include <stdio.h> #include <string.h> void main() { char arr1[] = {'1', '2', '3', '\0'}; char arr2[] = "123"; char *ptr = "123"; printf("--- arr1 ---\n"); printf("length of string : %lu\n", strlen(arr1)); printf("size of array : %lu\n", sizeof(arr1)); printf("--- arr2 ---\n"); printf("length of string : %lu\n", strlen(arr2)); printf("size of array : %lu\n", sizeof(arr2)); printf("--- ptr_arr1 ---\n"); printf("length of string : %lu\n", strlen(&arr1[0])); printf("size of pointer : %lu\n", sizeof(&arr1[0])); printf("--- ptr ---\n"); printf("length of string : %lu\n", strlen(ptr)); printf("size of pointer : %lu\n", sizeof(ptr)); } 輸出如下: ---...

利用lock檔避免程式重複執行

  想直接看lock應用的腳本範例,可以略過第一個範例。 理解鎖檔概念 #!/bin/sh LOCK_FILE=/var/lock/my.lock if [ -f $LOCK_FILE ]; then echo "$0 is running!" >&2 exit 0 fi touch $LOCK_FILE # Start to do my job. sleep 10 echo "Done." rm -f $LOCK_FILE   在無人使用腳本的情況下,開始時新增檔案my.lock,結束時會刪除檔案my.lock;當腳本正在執行中,若重複執行,就會因my.lock檔案存在,而直接結束程式。 使用trap指令   若在執行上方範例,在延遲10秒內,輸入Ctrl + C中斷程式,會發生什麼事呢?因為沒執行到最後一行的刪除my.lock動作,my.lock會一直存在,腳本被鎖住,不能再次執行。為避免程式不正常中斷,而被鎖住的問題,可利用trap指令來執行砍檔。 #!/bin/sh LOCK_FILE=/var/lock/my.lock if [ -f $LOCK_FILE ]; then echo "$0 is running!" >&2 exit 0 fi trap "rm -f $LOCK_FILE" EXIT touch $LOCK_FILE # Start to do my job. sleep 10 echo "Done."   無論何種因素結束程式,當程式結束之前,會發送EXIT訊號,trap攔到EXIT後訊號,就會將my.lock砍掉。這樣做,就能避免程式結束,而my.lock還存在的窘境。 嘗試寫檔取代touch   有沒有一種方法,my.lock不存在時新增,my.lock存在時報錯?利用寫檔的指令能辦到,只要先設定不能覆寫檔案,有檔案存在時,寫檔就會出錯,再判斷出錯跳出程式,就能避免重複執行。 寫一個空檔案的指令為 echo "" >$LOCK_FILE 或者簡化成 echo ...

私有IP

區域網路使用的私有IP,區分為3段,用二進制描述特性: 區段 10.0.0.0 - 10.255.255.255 可用IP 00001010.XXXXXXXX.XXXXXXXX.XXXXXXXX 最大區塊遮罩 11111111.00000000.00000000.00000000 分類預設遮罩 11111111.00000000.00000000.00000000 區段 172.16.0.0 - 172.31.255.255 可用IP 10101100.0001XXXX.XXXXXXXX.XXXXXXXX 最大區塊遮罩 11111111.11110000.00000000.00000000 分類預設遮罩 11111111.11111111.00000000.00000000 區段 192.168.0.0 - 192.168.255.255 可用IP 11000000.10101000.XXXXXXXX.XXXXXXXX 最大區塊遮罩 11111111.11111111.00000000.00000000 分類預設遮罩 11111111.11111111.11111111.00000000 用10進位的IP表示法: 區段 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255 最大區塊...

Linux文件格式常用指令

將\r\n轉換成\n sed -i 's/\r$//g' $FILENAME 效果同dos2unix 去除空格與Tab(\t) sed -i 's/[[:blank:]]*$//g' $FILENAME 效果同trim end