=vim使用小技巧==
vi -R file (唯讀)
vi -r file (回複buffer)
D 游標以後全部刪除
:ctags *.c (直接移到這個function上按 Ctrl+] 就到了,要回到原處就按 Ctrl+T)
:e #
:% (會對應到括號)
:set showmatch
:set autoindent (簡寫: :set ai /noai)
:set ic 忽略大小寫 (簡寫: :set ic/noic) -全名:ignorecase
:set nu 顯示行號 全名:number
v (字元區塊選取)
V (行區塊選取)
ctrl + ^ (二檔案切換)
"f5yy (啟動buffer,複製5行,f是暫存器)
"fp
在單字上K(大寫K直拉啟動此字的man)
單字上# (shift + 3)搜尋上一個字串
單字上* (shift + 8)搜尋下一個字串
自定縮寫
:ab pf prinf(" (取消縮寫:no ab pf)
折疊的記憶
:mkview
:loadview
忽略大小寫
:set noignorecase
還原"上一次的還原"
ctrl+r
zs(捲動視窗,讓游標在螢幕的左端-開始)
ze(捲動視窗,讓游標在螢幕的右端-結束)
去除空行:
:g/^$/d
==============================================================
多檔編輯
:160,224 y a (拉動 buffer a)
:pu a (置放 buffer a)
================================================================
ex編輯器:
:g/^[ tab]*$/d (刪除所有空白行,以及所有只包含空格的行)
:g/^[ tab][ tab]*$/d
:%s/\(.*\) *S/\1/ (刪除每一行結尾的所有空白)
:%s/^ *\(.*\)/\1/ (刪除每一行開頭的所有空白)
:%s/./\U&/g (將檔案中每一個單字轉成大寫)
--如何消去文字檔中的 ^M
:%s/^M//g
注意, ^M 是按 Ctrl + V 不放,再按 M,是一個字元,不是兩個字元
#在shell中使用
cat 1.txt | col -b > outfile
========================================================
========================================================
/* 把目錄下這個三資料copy過去 */
drwxr-xr-x 3 kaijun misgrp 512 Oct 14 09:00 .vim/ (vim的語法檔)
-rwxr-xr-x 1 kaijun misgrp 11175 Oct 19 09:32 .viminfo* (vim的記錄檔
)
-rwxr-xr-x 1 kaijun misgrp 489 Oct 19 09:31 .vimrc* (vim的設定檔
)
飛天!! 發表在 痞客邦 留言(0) 人氣(930)
Library可分成三種,static、shared與dynamically loaded。
1. Static libraries
Static 程式庫用於靜態連結,簡單講是把一堆object檔用ar(archiver)
包裝集合起來,檔名以 `.a' 結尾。優點是執行效能通常會比後兩者快,
而且因為是靜態連結,所以不易發生執行時找不到library或版本錯置而
無法執行的問題。缺點則是檔案較大,維護度較低;例如library如果發
現bug需要更新,那麼就必須重新連結執行檔。
1.1 編譯
編譯方式很簡單,先例用 `-c' 編出 object 檔,再用 ar 包起來即可。
____ hello.c ____
#include
void hello(){ printf("Hello "); }
____ world.c ____
#include
void world(){ printf("world."); }
____ mylib.h ____
void hello();
void world();
$ gcc -c hello.c world.c /* 編出 hello.o 與 world.o */
$ ar rcs libmylib.a hello.o world.o /* 包成 limylib.a */
這樣就可以建出一個檔名為 libmylib.a 的檔。輸出的檔名其實沒有硬性規定,
但如果想要配合 gcc 的 '-l' 參數來連結,一定要以 `lib' 開頭,中間是你要
的library名稱,然後緊接著 `.a' 結尾。
1.2 使用
____ main.c ____
#include "mylib.h"
int main() {
hello();
world();
}
使用上就像與一般的 object 檔連結沒有差別。
$ gcc main.c libmylib.a
也可以配合 gcc 的 `-l' 參數使用
$ gcc main.c -L. -lmylib
`-Ldir' 參數用來指定要搜尋程式庫的目錄,`.' 表示搜尋現在所在的目錄。
通常預設會搜 /usr/lib 或 /lib 等目錄。
`-llibrary' 參數用來指定要連結的程式庫 ,'mylib' 表示要與mylib進行連結
,他會搜尋library名稱前加`lib'後接`.a'的檔案來連結。
$ ./a.out
Hello world.
2. Shared libraries
Shared library 會在程式執行起始時才被自動載入。因為程式庫與執行檔
是分離的,所以維護彈性較好。有兩點要注意,shared library是在程式起始
時就要被載入,而不是執行中用到才載入,而且在連結階段需要有該程式庫
才能進行連結。
首先有一些名詞要弄懂,soname、real name與linker name。
soname 用來表示是一個特定 library 的名稱,像是 libmylib.so.1 。
前面以 `lib' 開頭,接著是該 library 的名稱,然後是 `.so' ,接著
是版號,用來表名他的介面;如果介面改變時,就會增加版號來維護相容度。
real name 是實際放有library程式的檔案名稱,後面會再加上 minor 版號與
release 版號,像是 libmylib.so.1.0.0 。
一般來說,版號的改變規則是(印象中在 APress-Difinitive Guide to GCC中有
提到,但目前手邊沒這本書),最尾碼的release版號用於程式內容的修正,
介面完全沒有改變。中間的minor用於有新增加介面,但相舊介面沒改變,所以
與舊版本相容。最前面的version版號用於原介面有移除或改變,與舊版不相容
時。
linker name是用於連結時的名稱,是不含版號的 soname ,如: libmylib.so。
通常 linker name與 real name是用 ln 指到對應的 real name ,用來提供
彈性與維護性。
飛天!! 發表在 痞客邦 留言(0) 人氣(36)
tcsh 的環境設定
/etc/csh.cshrc
/etc/csh.login
飛天!! 發表在 痞客邦 留言(0) 人氣(660)
關於 shell 方面如何設定環境的方法:
i. 系統執行的流程
user 的 login shell 大多設定為 tcsh ,這是一個類似於 csh 但是功能更強大的 shell ,
飛天!! 發表在 痞客邦 留言(0) 人氣(2,109)
Reference: http://kezeodsnx.pixnet.net/blog/post/27585076
變數的宣告,會配置其所需的記憶體。每種變數所需的大小不一樣,比如說char是1 bytes,int 是4 bytes,double則是8 bytes。如果是這樣,那這些大小在記憶體中是如何擺放呢?是直覺的一個接一個放嗎?其實不然。這牽扯到performance / efficiency的問題! 在32 bits的架構上,一次的資料存取也就是32 bits (4 bytes)。而這4 bytes 不是隨便從哪個點抓都可以,而是以4 bytes為單位,不管需要的是其中那個byte,就抓那4個bytes。比如說,抓第0,4,8 ,12....等,而不會是從3,7,9開始抓4個bytes。
這代表什麼呢?這表示了對齊 (alignment)的重要,因為會影響到幾次才抓的完。如果要抓一個4 bytes 的int,而這個int是從6擺到10,那就表示要抓兩次,自然效能較差了。因此,在struct的宣告是存在對齊這件事的。見下例:
飛天!! 發表在 痞客邦 留言(0) 人氣(83)