程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 歸納整理Linux下C語言常用的庫函數----文件操作,linux庫函數

歸納整理Linux下C語言常用的庫函數----文件操作,linux庫函數

編輯:關於C語言

歸納整理Linux下C語言常用的庫函數----文件操作,linux庫函數


在沒有IDE的時候,記住一些常用的庫函數的函數名、參數、基本用法及注意事項是很有必要的。

參照Linux_C_HS.chm的目錄,我大致將常用的函數分為一下幾類:

  • 1. 內存及字符串控制及操作
  • 2. 字符串轉換
  • 3. 字符測試
  • 4. 文件操作
  • 5. 時間日期
  • 6. 常用數學函數
  • 7. 文件內容操作
  • 8. 文件權限控制
  • 9. 進程操作
  • 10. 線程操作
  • 11. Socket操作
  • 12. 信號處理
  • 13. 數據結構及算法

 


 

這次主要總結的是上面黑色部分,關於文件操作的函數。

  • 系統調用歸類
*
*            函數名                                             用法                                備注
*
*1. int open(const char *pathname, int flags);    open and possibly create a file or device      flags 必須包含O_RDONLY, O_WRONLY, or O_RDWR中的任何一個
*
*2. int open(const char *pathname, int flags, mode_t mode);     UP                              mode只是在flags中包含O_CREAT時才有效
*
*3. int fsync(int fd);                            synchronize a file's in-core state with storage device  寫完數據close前必須先同步,以防意外
*
*4. off_t lseek(int fd, off_t offset, int whence);  定位文件位置                                第三個參數可以為SEEK_SET SEEK_CUR SEEK_END
*
*5. ssize_t read(int fildes, void *buf, size_t nbyte); UP                                       文件位置會隨讀取的字節數移動
*
*6. ssize_t write(int fildes, const void *buf, size_t nbyte);   UP                              UP
*
*7. int close(int fd);                                          UP                              UP
*
*8.  void *mmap(void *addr, size_t length, int prot, int flags, 內存映射                        先用fstat得到文件大小,然後使用該函數將文件內容映射到內存中,然後就可以

                  int fd, off_t offset);                                                        直接調用字符串函數操作。
*
*9. int munmap(void *addr, size_t length);                      釋放內存                        UP
*
*10. int ftruncate(int fd, off_t length);            truncate a file to a specified length      在新建文件時,如果用到內存映射,那麼就需要先調用該函數給文件預置一個大小,否則會出錯
*
*11. int fstat(int fd, struct stat *buf);           獲得文件的基本信息                          具體參數見man,可以查到文件的大小、修改日期等
*

 

  • C99標准歸類
/*標准C函數
*               函數名                                      用法                                        備注
*
*1. FILE *fopen(const char *path, const char *mode);    NT                                      mode可以為r,r+,w,w+,a,a+,rw等
*
*2. int fseek(FILE *stream, long offset, int whence);   NT                                      定位文件位置
*
*3. long ftell(FILE *stream);                           當前文件位置                            NT
*
*4. void rewind(FILE *stream);                          移動文件位置到文件頭                    NT
*
*5. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);   NT                      NT
*
*6. size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); NT                  NT
*
*7. int feof(FILE *stream);                             判斷文件是否已經讀完                    NT
*
*8. int fscanf(FILE *stream, const char *format, ...);  按格式讀取文件流                        還有scanf家族的其他函數,比如sscanf可以讀取字節流
*
*9. int fprintf(FILE *stream, const char *format, ...); 按格式將內容寫入到文件中                還有sprintf,vprintf等等
*
*10. int vfprintf(FILE *stream, const char *format, va_list ap);    直接將不定參數寫入到文件    相對應的還有讀取函
*
*11. int fflush(FILE *stream);                          NT                                      NT
*
*12. char *fgets(char *s, int size, FILE *stream);       NT                                      讀到換行符或EOF時停止
*
*13. int fileno(FILE *stream);                          返回整型文件描述符                      這是和GLIBC相通的地方
*
*14. int fputs(const char *s, FILE *stream);            NT                                      不寫入結束符\0
*
*/

 

  • 文件權限控制類函數匯總
*           函數名                                          用法                                    備注
*
*1. int remove(const char *pathname);                       NT                                      刪除指定路徑的文件
*
*2. int rename(const char *old, const char *new);           NT                                      重命名
*
*3. int utime(const char *path, const struct utimbuf *times);   NT                                  修改文件的存取時間
*
*4. int stat(const char *restrict path, struct stat *restrict buf); NT                              可以進一步獲得文件的詳細信息
*
*5. int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
                                                            NT                                      讀取文件夾內容
*
*6. DIR *opendir(const char *name);                         NT                                      打開文件夾,這是第一步
*
*7. char *getcwd(char *buf, size_t size);                   NT                                      獲得當前的絕對路徑
*
*8. int chmod(const char *path, mode_t mode);               NT                                      改變文件權限
*
*9. int closedir(DIR *dirp);                                NT                                      打開文件夾後必須要關閉
*
*10. int chdir(const char *path);                           NT                                      改變當前的工作目錄
*

 

  • 附加,處理不定參需要用到的函數

 

*
*1. void va_start(va_list ap, last);                    必須首先被調用
*
*2. type va_arg(va_list ap, type);                      緊接著,根據%s %d %c得到實際的值
*
*3. void va_end(va_list ap);                            得到需要的值後,就調用end。
*
*

 

如上,只是對常用的函數進行簡單的總結,一些不常用的,比如鏈接之類的,就沒有進行歸類。

 

這些函數,至少要知道有這些功能,而不需要自己再去實現,具體參數不清楚的,知道函數名後,在Linux下,用man fun就可以有更具體的闡述。

 


linux下復制文件到其他目錄的c語言庫函數

這個不知道有沒有,可以使用system函數執行shell命令復制
如:system("cp /home/file1 /root/file2");
另外樓上們說的fread、fwrite等函數都可能因為文件太大無法在內存展開而失敗。
 

linux中c語言庫函數目錄

樓上已經講的很好了, 我再給你普及一下。
內核的memset函數是內核自己用的。 你在用戶層面是看不見這個memset的。
內核所有的函數都是自己內部實現的, 沒有使用別的庫。
你寫應用程序的時候用的memset一般是由glibc提供的,
最起碼弄清楚一點, 內核不使用其他的C庫, 完全自給自足。 你平時用的C庫函數在內核是找不到的

樓上已經講的很好了, 我在給你普及一下。
內核的memset函數是內核自己用的。 你在用戶層面是看不見這個memset的。
內核所有的函數都是自己內部實現的, 沒有使用別的庫。
你寫應用程序的時候用的memset一般是由glibc提供的,
最起碼弄清楚一點, 內核不使用其他的C庫, 完全自給自足。 你平時用的C庫函數在內核是找不到的

還有內核源碼不光是PC上用的, 其他架構的源碼也提供, arch 文件夾下面就是與架構相關的代碼

PC一般是x86
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved