linux下開發遇到的問題集合

 記錄在linux下開發遇到的各種問題,方便以後查找。

 

1.關於shell中腳本的執行方式:在當前腳本執行還是啓動一個新的shell進程來執行腳本。

假設當前目錄下有腳本script.sh

啓動一個新的shell進程來執行:

這是shell中默認的執行方式是啓動一個新的shell進程(子進程)來執行腳本,即sh script.sh或者賦予script.sh執行權限後直接執行腳本:./script.sh

 

在當前shell執行:

有時需要在當前shell執行腳本,比如腳本中涉及到修改shell的環境變量時,需要這樣執行(否則修改的將是新啓動的子shell進程的環境變量):

source script.sh或者 .  script.sh(注意點 . 後面有空格,然後纔是腳本路徑)。

 

2.修改shell的環境變量。

見:http://blog.csdn.net/cnctloveyu/archive/2009/12/25/5075128.aspx

 

3.添加用戶爲sudoer

       推薦以root用戶使用visudo命令(有的版本提供的是sudoedit),添加一行:        

xxxx ALL=(ALL)  ALL

其中,xxxx爲要添加的用戶名,保存就OK

         另外,也可以採用以root用戶編輯/etc/sudoers,也是添加xxxx ALL=(ALL)  ALL,但注意該文件默認爲只讀。

 

4.vi的常用操作

http://blog.csdn.net/lazyclough/archive/2009/11/15/4811862.aspx

  

5.bash中常用快捷鍵

見:http://blog.csdn.net/cnctloveyu/archive/2009/12/25/5076017.aspx

 

6.編譯別人寫好的代碼出現某些函數找不到時(尤其是條件編譯的部分),首先考慮從配置文件上尋求解決辦法,儘量不要去修改源代碼。

 

2009-12-30 

7.vim的相關:

1)安裝配置vim,已經記錄

 

2)vim2個小技巧:

vim中插入一個文件的內容:

:r filename

vimctrl-w的用法:先按住ctrlw,然後鬆開,然後按其他鍵。

 

 

 2010-01-05

8.關閉Fedora SELinux的方法:

修改/etc/selinux/config文件中的SELINUX="" disabled ,然後重啓。

如果不想重啓系統,使用命令setenforce 0

詳見:http://blog.csdn.net/cnctloveyu/archive/2010/01/05/5135025.aspx

 

9.Broadcom的板子上使用CFE作爲bootloader的幫助使用:

如要查詢ifconfig的幫助:

help ifconfig

附:常用的ifconfig使用:

ifconfig eth0 –auto(自動配置,需要網關有dhcp

或者 ifconfig eth0 –addr=x.x.x.x –mask=x..x..x..x(addripmask爲掩碼)

 

10.查看網絡、端口:

netstat命令:如可以使用netstat –al查看所有的socket

詳見:http://blog.csdn.net/cnctloveyu/archive/2010/01/05/5135196.aspx

 

 

 2010-01-06

 

11.shell中給變量賦值,切記在“=”的兩端均不能有空格,否則shell會認爲沒有賦值。

2010-01-07

12.某SDK中的一段關於手動內存對齊的源碼:

#define ALIGN_4096   (4096 - 1)

uint8_t *p=malloc(bufSize + ALIGN_4096);

p=(uint8_t *)(((unsigned long)p + ALIGN_4096) & ~ALIGN_4096);

假定機器是字節尋址,uint_t8位的無符號整數的話,上面的3條語句將會使指針p的內存地址按4k字節對齊。

上述語句的效果:

如果p% 4096=0p不變;

如果p% 4096<>0p=(p/4096 + 1)*4096;(等式中的/是整數除法,結果取整)。

P.S.:上面的第二條語句保證了每次分配的空間都不小於4k,也就不會有2個不同的地址被對齊到相同的地址了。

 

 2010-01-21

 

13.linux中網絡同步時間:

  ntpdate  x.x.x.x
  x.x.x.xntp時間服務器的地址,如
  210.72.145.44(中國國家授時中心服務器IP地址)
  s2h.time.edu.cn 四川大學網絡管理中心
  203.117.180.36
  ntp.sjtu.edu.cn(上海交通大學網絡中心NTP服務器地址)

 

14.段錯誤小結:

  常見的段錯誤:指針訪問越界pthread線程庫相關。首先考慮指針訪問越界,確定指針訪問沒有任何問題之後再考慮其他。
  這裏主要說說指針訪問越界:
1.       數組訪問越界;
2.       使用未正確初始化的指針;
3.       試圖使用已經回收的資源,如使用libcurl庫時,已經使用global_clean等回收了資源,還試圖訪問資源(比如多線程情況下,先clean再結束還在使用libcurl資源的線程……發生段錯誤!)
 

15.共享變量(或者全局變量)的初始化:

對於多個函數或者線程共享的變量,需要確保在每次需要對該變量做初始化時使用相同初始值,對於變量的可能取值已經確定並且有限的情況,最好使用enum或者一組常量來表示該變量的可能取值,並且用一個函數來對該變量進行初始化,確保每次初始化動作相同。(對於有多個需要共享的變量或者多次需要初始化時尤爲重要,可以防止錯誤的初始化帶來的錯誤。)

 

16.使用pthread線程庫的小問題:

1.認真謹慎地考慮線程間的同步問題;

2.如果需要在線程阻塞時取消線程,需要設置線程的取消屬性爲異步:

  使用pthread_setcanceltype函數

4.       pthread的線程結束函數:pthread_cancel只是給線程發送結束的信號,具體的動作由收到該信號的線程設置來定。注意使用之前先判斷線程的PID是否合法。

 

17.C語言雜項:

1.調試程序時,可以在printf語句中使用C標準中預定義的宏:__LINE____FILE__,輸出語句所在的行號和文件

2.宏定義中如果包含多條語句應該使用do-while循環包裹語句:

    do{     }while0);

    以防止宏的副作用。

 

18.2個用到的庫:

  libcurl一個強大的HTTP操作庫,減少自己使用socket的麻煩,主頁:

http://curl.haxx.se/

  libmad一個開源的高精度 MPEG 音頻解碼庫:

           使用方法:

http://blog.csdn.net/knight8267/archive/2009/09/03/4513830.aspx

 

 

 2010-01-26

19.關於C、C++中的const的一點小實驗:

      http://blog.csdn.net/cnctloveyu/archive/2010/01/26/5258700.aspx

發佈了12 篇原創文章 · 獲贊 19 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章