一、gcc mysql
gcc -I(include目錄) gcc -o(輸出文件) gcc -c(產生.o文件) gcc -L . -lfoo(使用當前目錄libfoo.a) gcc -g(添加調試信息) linux
.a靜態庫 .so動態庫 git
合併靜態庫: ar crv libfoo.a bill.o fred.o 正則表達式
生成內容表:ranlib libfoo.a sql
nm命令列出.o文件的各類符號 shell
Linux負責動態庫加載的模塊是ld.so(動態裝載器),配置文件/etc/ld.so.conf,加載命令ldconfig 數據庫
查看程序所需共享庫命令ldd windows
2、shell 數組
Shell內置變量: 網絡
$# 參數個數
$$ 腳本進程號
$* IFS分割的全部參數
$@ 全部參數
Shell if:
test等同[]:
if test -f fread.c then if [ -f fread.c ]; then
... ...
fi fi
參數:
-d文件爲目錄 -e文件存在 -f爲文件 -g -r可讀 -w可寫 -x可執行
-n字符串不爲空 -z字符串爲空
-eq== -ge>= -gt> -le<= -lt<
循環:
for foo in bar while ; until ;
do do do
... ... ...
done done done
break continue
return 整數返回值
選擇:
case 「$a」 in
yes | y ) echo 「yes!!!」 ;;
no | n ) echo 「no!!!」 ;;
*) echo 「*!!!」 ;;
esac
內置函數:
eval
exec執行命令
export設置子shell環境變量
expr數學計算,等同於$(( $a + 1))
set設置變量
shift減小參數,從1開始左移
unset刪除變量
find
-depth查看目錄自己以前先搜索目錄
-follow跟隨符號連接
-maxdepth N最大搜索深度
-mount(-xdev)不搜索其餘系統中的目錄
-atime N N天以前訪問過
-mtime N N天以前修改過
-name pattern 名字
-newer otherfile 比otherfile新
-type C 文件類型d目錄 f文件 c特殊
-user username用戶
! 取反
-a 與
-o 或
-exec command 執行命令,以\:結尾
-print 打印
-ls
find . -newer while2 -type f -exec ls -l {} \;
grep
-c 匹配行數
-E 正則表達式
-h 取消輸出前綴
-i 忽略大小寫
-l 列出匹配文件名
-v 取反模式
^ 開頭
$ 結尾
. 任意字符
[] 區間
[^] 反區間
[:alnum:] 數字字符串成
[:alpha:] 字母
[:ascii:] ASCII字符
[:blank:] 空格或者製表符
[:cntrl:] 控制字符
[:digit:] 數字
[:graph:] 非控制字符
[:lower:] 小寫字母
[:print:] 可打印字符
[:punct:] 標點
[:space:] 空白
[:upper:] 大寫字母
[:xdigit:] 十六進制數字
字符串:
${param:-default} param空則default
${#param} param長度
${param%word} 從頭部開始刪除word(最短)返回剩餘
${param%%word} 從頭部開始刪除word(最長)返回剩餘
${param#word} 從尾部開始刪除word(最短)返回剩餘
${param##word} 從尾部開始刪除word(最長)返回剩餘
三、linux文件函數
open read write close flush ioctl lseek fstat stat lstat
fopen fread fwrite fclose fflush fseek(fgetpos,fsetpos,ftell) fgetc(getc,getchar)
fputc(putc,putchar) fgets(gets) printf(fprintf,sprintf) scanf(fscanf,sscanf) remove
chmod chown unlink(link,symlink) mkdir(rmdir,chdir,getcwd) opendir(readdir,telldir)
seekdir closedir
/proc目錄,實現對內核和驅動程序的訪問
/proc/cpuinfo /proc/meminfo /proc/version /proc/pid
mmap內存映射,創建一段能夠被兩個或多個程序讀寫的內存
分析argv參數的函數
getopt getopt_long
getenv putenv
time difftime mktime localtime gmtime
asctime ctime strftime strptime
臨時文件:
tmpnam tmpfile
日誌:
syslog closelog openlog setlogmask
進程:
優先級-20~20默認0,數值越高優先級越低
getrusage getpriorty setpriorty getrlimit setrlimit(棧大小、cpu時間、數據大小、文件大小、文件數、dump大小、地址空間)
四、終端
Linux使用換行符表明一行結束,windows回車+換行符,目的是字節流的統一
檢查標準輸出重定向:isatty
isatty(fileno(stdout)) ::fileno獲取底層文件流使用的文件描述符
終端設備,當前登錄會話在/dev/tty,命令stty
查看當前終端類型 echo $TERM
五、內存分配
malloc(calloc數組內存分配,realloc改變已分配內存長度) free
內存頁面大小4k
檢測內存泄露:
cc -o efence efence.c -lefence 使用efence庫
valgrind --leak-check=yes -v ./checker
六、文件鎖定
fcntl.h
全文件鎖與區域文件鎖
file_desc = open(「/tmp/lck.test」, O_RDWR|O_CREAT|O_EXCL, 0444)
fcnt(int fildes, int command, struct flock*)
七、dbm數據庫
dbm_opem dbm_store dbm_fetch dbm_close dbm_delete dbm_firstkey dbm_nextkey
八、Mysql數據庫
mysql -u root
select user,host,password from mysql.user;
grant all on *.* to rick@localhost identified by isecretpassword;
myisamchk
mysqladmin
msqlbug
mysqldump
mysqlimport
mysqlshow
grant revoke
九、Make、makefile、cmake
makefile規則:
依賴關係: 目標名稱:文件a 文件b
規則:以table開頭
注:一次性多個文件使用僞目標all,all:myapp myapp.1
一個實例:
all:myapp #which compiler CC = gcc #where are include files kept INCLUDE=. #options for develop CFLAGS=-g -wall -ansi #option for release CFLAGS=-o -wall -ansi myapp:main.o 2.o 3.o $(CC) -o myapp main.o 2.o 3.o main.o:main.c a.h $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c 2.o:2.c a.h b.h $(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c 3.o:3.c b.h c.h $(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c clean: -rm main.o 2.o 3.o install: @if [ -d $(INSTALL) ];\ then \ cp myapp $(INSTALL); \ ...... else \ echo ......; \ fi
十、Gdb調試
編譯加入-g選項,加入-p(pg)選項產生執行存儲
gdb xxxexe; gdb xxxx xxx.dum
run 執行
bt 堆棧
p i 打印i變量
list 代碼
b 21 在21行斷點
c 繼續執行
display array[0]@5 顯示array變量
info break 斷點列表
info display 監視列表
disable break/display 設置斷點或者監視無效
command 2 編輯斷點2
代碼審查工具:lint splint
函數調用工具:ctags建立函數索引 cxref變量調用列表 cflow函數調用樹
十一、進程
ps -ef ps-ax
進程狀態:S睡眠 R運行 D等待 T中止 Z僵死
system啓動新進程 exec替換當前進程 fork複製進程 wait等待子進程結束
信號
void (*signal(int sig, void (*func)(int)))(int);
發送信號:kill alarm pause sigaction
信號集:sigaddset sigemptyset sigfillset sigdelset sigismember sigprocmask sigpending sigsuspend
pthread_create pthread_join pthread_exit pthread_cancel pthread_setcancelstate
信號量:sem
sem_init sem_wait sem_post sem_des
互斥量:mutex
pthread_mutex_init pthread_mutex_lock pthread_mutex_unlock pthread_mutex_destroy
十二、管道
popen pclose
pipe dup
命名管道:mkfifo filename,open/close/read/write
1三、IPC
信號量:semget semop semctl
共享內存:shmget shmat shmctl shmdt
消息隊列:msgget msgctl msgrcv msgsnd
信號量、共享內存、消息隊列存在殘留問題,使用ipcs/ipcrm命令查看:
信號量 ipcs -s ipcrm sem
共享內存 ipcs -m ipcrm shm
消息隊列 ipcs -q ipcrm msg
1四、網絡字節序與主機字節序 htonl: host to net long htons: host to net short ntohl: net to host long ntohs: net to host short