日常收藏與小記

1、Linux環境下段錯誤的產生原因及調試方法小結

Linux環境下段錯誤的產生原因及調試方法小結
博客園的一篇文章,對段錯誤原因和調試方法講的還不錯

2、Ubuntu重裝桌面以及vbox虛擬機進入命令行

2.1 重裝桌面

sudo apt-get install --reinstall ubuntu-desktop
sudo reboot

2.2 vbox虛擬機進入命令行

vbox如果按ctrl+alt,就會切換到主機下,使用右邊的ctrl(也叫HOST鍵)可以替代這個組合,即按 ‘右ctrl+f1’ 即可。

3、棧、堆和常量區在代碼中的區別

直接上代碼

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define getmem 3    //1,stack; 2,heap; 3,const

#if getmem == 1	//stack
char *GetString(void){
	char array[6] = "hello";

	return array;
}

#elif getmem == 2	//heap
char *GetString(void){
	char *array;
	char buf[6] = "hello";
	
    array = malloc(sizeof(buf));
    strcpy(array, buf);
    
	return array;
}

#elif getmem == 3	//const
char *GetString(void){
	char *array = "hello";

	return array;
}
#endif

void main()
{
	char *pstr = NULL;
	
	pstr = GetString();
	printf("%s\n", pstr);
}

運行會發現
棧在出了函數之後就不可用了,程序運行會出錯
堆和常量,在出了函數後仍可被使用

4、strlen使用注意事項

strlen在沒有發現 \0 前會一直查找下去,然後返回 \0 之前的字符長度。
所以如果用strlen查詢不確定的字符串長度,可能導致意外的無限循環。

5、tcp套接字api調用

tcp套接字api調用

6、字符集和字符編碼

字符集(Character set)
字符的集合,每個字符集包含的字符個數不同,常見字符集:

ASCII字符集
GB2312字符集
BIG5字符集
GB18030字符集
Unicode字符集等

字符編碼
比如UTF-8,就是Unicode字符集的編碼方式

二者區別
字符集是書寫系統字母與符號的集合。
字符編碼則是將字符映射爲一特定的字節或字節序列,是一種規則。

字符集和字符編碼對應關係

字符集 字符編碼
ASCII ASCII
GB2312 GB2312
GBK GBK
GB18030 GB18030
Unicode UTF-8、UTF-16、UTF-32

7、cp命令保留文件屬性複製庫鏈接文件

比如拷貝帶有soft-link的so文件時, 加上-d參數就可以保留鏈接文件的屬性了,而不會去複製了鏈接的原始庫文件,命令如下:

cp -d  libXXX.so*  $DEST_DIR

8、\r\n和CR/LF的意思

\r是回車,英文是Carriage Return,簡稱CR作用:使光標到行首
\n是換行,英文是New Line或者是Line Feed,簡稱LF,作用:換到新行

9、編譯時庫的鏈接優先級

系統路徑中如果有跟編譯選項-L路徑中的同名庫,哪個更優先呢?優先級如下:

1.編譯目標代碼時指定的動態庫搜索路徑;
2.環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
3.配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;
4.默認的動態庫搜索路徑/lib;
5.默認的動態庫搜索路徑/usr/lib.

同時可以指定程序運行時,從哪個目錄搜索動態庫,具體是用 -rpath 選項,如:

-Wl,-rpath=/mnt/app/

10、curl命令

1、利用curl下載http文件

curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz

可以在http://mirrors.ustc.edu.cn/gnu/windows/emacs/emacs-26/下載文件


2、curl命令詳解,可以參考http://www.linuxdiyf.com/linux/2800.html

11、Linux釋放內存

釋放 echo 3 > /proc/sys/vm/drop_caches
  0:0是系統默認值,默認情況下表示不釋放內存,由操作系統自動管理
  1:釋放頁緩存
  2:釋放dentries和inodes
  3:釋放所有緩存

如果現在想讓操作系統重新分配內存,那麼設置drop_caches的值爲0即可

12、關於指針的初始化

如果定義指針的時候,指針指向一個有空間的數據,這時不需要分配空間;
如果要給指針賦值,則需要分配內存空間。

13、xml中node和element的區別

一張圖解釋
node和element的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章