linux的c編程技巧_第1頁
linux的c編程技巧_第2頁
linux的c編程技巧_第3頁
linux的c編程技巧_第4頁
linux的c編程技巧_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、linux的c編程技巧1. 獲取文件的信息:stat(char* filename, struct stat* buf);struct stat dev_t st_dev; /* 設(shè)備 */ino_t st_ino; /* 節(jié)點(diǎn) */mode_t st_mode; /* 模式 */nlink_t st_nlink; /* 硬連接 */uid_t st_uid; /* 用戶id */gid_t st_gid; /* 組id */dev_t st_rdev; /* 設(shè)備類型 */off_t st_off; /* 文件字節(jié)數(shù) */unsigned long st_blksize; /* 塊大小 */

2、unsigned long st_blocks; /* 塊數(shù) */time_t st_atime; /* 最后一次訪問時(shí)間 */time_t st_mtime; /* 最后一次修改時(shí)間 */time_t st_ctime; /* 最后一次改變時(shí)間(指屬性) */;struct statfslong f_type; /* 文件系統(tǒng)類型 */long f_bsize; /* 塊大小*/long f_blocks; /* 塊多少*/long f_bfree; /* 空閑的塊()*/long f_bavail; /* 可用塊 */long f_files; /* 總文件節(jié)點(diǎn) */long f_ffre

3、e; /* 空閑文件節(jié)點(diǎn) */fsid_t f_fsid; /* 文件系統(tǒng)id */long f_namelen; /* 文件名的最大長(zhǎng)度 */long f_spare6; /* spare for later */;2. 獲取文件訪問權(quán)限或者判斷文件是否存在:int access(char* filename, int mode);3. 獲取當(dāng)前時(shí)間:time_t t;char* asctime(localtime(&t);或者time(&t);char* ctime(&t);得到的字符串形式為:wed mar 12 10:07:53 20034. 計(jì)算兩個(gè)時(shí)刻之間的時(shí)間差double di

4、fftime(time_t time2, time_t time1);5. 刪除某文件:int unlink(char* pathname);int remove(char* pathname);6. 刪除某目錄:int rmdir(const char* pathname);7. 獲得當(dāng)前所在目錄名:char * getcwd(char *buf,size_t size); buf將會(huì)返回目前路徑名稱。8. 獲取目錄信息:dir * opendir(const char * pathname);int closedir(dir *dir);struct dirent * readdir(di

5、r *dir);struct direntlong d_ino; /* inode number */off_t d_off; /* offset to this dirent */unsigned short d_reclen; /* length of this d_name */char d_name name_max+1; /* file name (null-terminated) */;array. strerror(errno);函數(shù)會(huì)返回一個(gè)指定的錯(cuò)誤號(hào)的錯(cuò)誤信息的字符串.10.得到當(dāng)前路徑下面所有的文件(包含目錄)的個(gè)數(shù)struct dirent *namelist;int

6、num = scandir(.,&namelist,0,alphasort)11./etc/ld.so.conf:包含共享庫的搜索位置查看執(zhí)行文件調(diào)用了哪些共享庫shellldd a.out共享庫管理工具,一般在更新了共享庫之后要運(yùn)行該命令shellldconfig12.查看文件執(zhí)行的速度shelltime ./a.out13.改變文件訪問權(quán)限int chmod(const char* path, mode_t mode);14.改變文件大小int chsize(int handle, long size);15.把一個(gè)浮點(diǎn)數(shù)轉(zhuǎn)換為字符串char ecvt(double value, int

7、ndigit, int *decpt, int *sign);16.檢測(cè)文件結(jié)束int eof(int *handle);17.檢測(cè)流上的文件結(jié)束符int feof(file *stream);18.檢測(cè)流上的錯(cuò)誤int ferror(file *stream);1array.裝入并運(yùn)行其它程序的函數(shù)int execl(char *pathname, char *arg0, arg1, ., argn, null);int execle(char *pathname, char *arg0, arg1, ., argn, null,char *envp);int execlp(char *pa

8、thname, char *arg0, arg1, ., null);int execple(char *pathname, char *arg0, arg1, ., null,char *envp);int execv(char *pathname, char *argv);int execve(char *pathname, char *argv, char *envp);int execvp(char *pathname, char *argv);int execvpe(char *pathname, char *argv, char *envp);20.指數(shù)函數(shù)double exp(d

9、ouble x);21. struct sockaddrunsigned short sa_family; /* address family, af_xxx */char sa_data14; /* 14 bytes of protocol address */;struct sockaddr_inshort int sin_family; /* address family */unsigned short int sin_port; /* port number */struct in_addr sin_addr; /* internet address */unsigned char

10、sin_zero8; /* same size as struct sockaddr */;struct in_addrunsigned long s_addr;s_addr按照網(wǎng)絡(luò)字節(jié)順序存儲(chǔ)ip地址sin_zero是為了讓sockaddr與sockaddr_in兩個(gè)數(shù)據(jù)結(jié)構(gòu)保持大小相同而保留的空字節(jié)。使用的例子:struct sockaddr_in sa;sa.sin_family = af_inet;sa.sin_port = htons(34array0);sa.sin_addr.s_addr = inet_addr(132.241.5.10);bzero(&(sa.sin_zero)

11、, 8);注意:如果sa.sin_addr.s_addr inaddr_any,則不指定ip地址(用于server程序)22. #define unix_path_max 108struct sockaddr_unsa_family_t sun_family; /* af_unix */char sun_pathunix_path_max; /* 路徑名 */;23. ip地址轉(zhuǎn)換函數(shù):unsigned long inet_addr (const char *cp);inet_addr將一個(gè)點(diǎn)分十進(jìn)制ip地址字符串轉(zhuǎn)換成32位數(shù)字表示的ip地址(網(wǎng)絡(luò)字節(jié)順序)char* inet_ntoa (

12、struct in_addr in);inet_ntoa將一個(gè)32位數(shù)字表示的ip地址轉(zhuǎn)換成點(diǎn)分十進(jìn)制ip地址字符串。這兩個(gè)函數(shù)互為反函數(shù)字節(jié)順序轉(zhuǎn)換:htons()-host to network shorthtonl()-host to network longntohs()-network to host shortntohl()-network to host long24. 獲取當(dāng)前機(jī)器的cpu、內(nèi)存使用情況getrusage25. open的使用中常用的flag和mode參數(shù)int file_flag = o_wronly|o_append|o_creat; int file_mo

13、de = s_irusr|s_iwusr|s_irgrp|s_iroth; 26. makefile中常用的符號(hào):預(yù)定義變量 含義$* 不包含擴(kuò)展名的目標(biāo)文件名稱。$ 目標(biāo)的完整名稱$% 如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱。例如,如果目標(biāo)名稱為 mytarget.so(image.o),則 $ 為 mytarget.so,而 $% 為 image.o。$+ 所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。$ 第一個(gè)依賴文件的名稱。$? 所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚$ 所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件

14、。ar 歸檔維護(hù)程序的名稱,默認(rèn)值為 ar。arflags 歸檔維護(hù)程序的選項(xiàng)。as 匯編程序的名稱,默認(rèn)值為 as。asflags 匯編程序的選項(xiàng)。cc c 編譯器的名稱,默認(rèn)值為 cc。ccflags c 編譯器的選項(xiàng)。cpp c 預(yù)編譯器的名稱,默認(rèn)值為 $(cc) -e。cppflags c 預(yù)編譯的選項(xiàng)。cxx c+ 編譯器的名稱,默認(rèn)值為 g+。cxxflags c+ 編譯器的選項(xiàng)。fc fortran 編譯器的名稱,默認(rèn)值為 f77。fflags fortran 編譯器的選項(xiàng)。用變量object表示所有的.o文件:objects := $(wildcard *.o)make -n

15、或者-just-print表示只是顯示命令,但不會(huì)執(zhí)行命令make -s或者-slient表示全面禁止命令的顯示make -i或者-ignore-errors表示makefile中所有命令都會(huì)忽略錯(cuò)誤make -k或者-keep-going表示如果某規(guī)則中的命令出錯(cuò)了,那么就終止該規(guī)則的執(zhí)行,但繼續(xù)執(zhí)行其它規(guī)則在makefile中直接利用shell獲取變量plat使用make中的一種用變量來定義變量的方法。這種方法使用的是“:=”操作符plat := $(shell uname -a)我們要定義一個(gè)變量,其值是一個(gè)空格,那么我們可以這樣來:nullstring :=space := $(nullstring) # end of the linefoo ?= bar含義是:如果foo沒有被定義過,那么變量foo的值就是“bar”,如果foo先前被定義過,那么這條語將什么也不做,其等價(jià)于:ifeq ($(origin foo), undefined)foo = barendiffoo := a.o b.o c.obar := $(foo:.o=.c)我們先定義了一個(gè)“$(foo)”變量,而第二行的意思是把“$(foo)”中所有以“.o”字串“結(jié)尾”全部替換成“.c”,所以我們的“$(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論