LinuxC程式設計實戰學習筆記 一

2021-10-03 19:51:49 字數 4693 閱讀 4037

page:95 - 104

/*	啟動	*/

$ gcc -g test.c -o test //-g引數必須加

$ gdb test //gdb 程式檔名 加上-q引數不輸出版權說明

$ gdb -q //也可以直接輸入gdb,用file命令裝入需要除錯的程式

(gdb) file test //(gdb)是提示符

/* 退出 */

(gdb) quit

/* 顯示 */

(gdb) list //顯示十行**

(gdb) list 5,10

//顯示5-10行**

(gdb) list test.c:5,

10//顯示原始檔test.c的5-10行

(gdb) list 《函式名》

//顯示該函式周圍**

/* shell */

(gdb) shell 《命令》

//除錯時使用shell命令

/* 執行 */

(gdb) run //執行程式

/* help */

(gdb) help 《命令》

//了解某命令使用方法

/* 斷點 */

(gdb)

break

《行號》

(gdb)

break

《函式名》

(gdb)

break

《行號/函式名》

if《條件》

//條件表示式成真時設定斷點

(gdb) info breakpoints //檢視所有斷點資訊

(gdb) disable 《斷點編號》

//使斷點失效

(gdb) enable 《斷點編號》

//使斷點有效

(gdb) delete 《斷點編號》

//刪除該斷點

(gdb) clear //刪除所有斷點

(gdb) clear 《函式名/行號》

//刪除該斷點

/* 檢視和設定變數 */

(gdb) print 《變數/表示式》

//列印該值

(gdb) print 《變數=值》

//對變數進行賦值

(gdb) print 《表示式@要列印的值的個數n>

//列印以表示式值開始的n個數

(gdb) whatis 《變數名/表示式》

//顯示資料型別

(gdb) set variable 《變數=值》

//相當於print 《變數=值》

/* watch */

(gdb) watch 《條件表示式》

//條件表示式值改變時暫停

//watch i==99 需在i定義後輸出,所以在i定義時先設定斷點

/* 控制執行 */

(gdb)

continue

//執行到下一次暫停或程式結束

(gdb) next //執行一條語句但不進入函式

(gdb) step //執行一條語句並可以進入函式

(gdb) finish //執行到當前函式結束

(gdb) until //執行到迴圈體結束

(gdb) kill //詢問是否結束除錯

(gdb) nexti //執行一條機器指令(類似next)

(gdb) stepi //執行一條機器指令(類似step)

tips:

1.直接敲回車則執行上一次的命令

2.一些命令可以簡寫,如list可以寫成li

通過裝置驅動本身提供的介面:讓使用者程序繞過檔案系統直接讀寫磁碟內容,帶來不穩定性

通過虛擬檔案系統(virtual file system)提供給上層應用程式的介面(api)

fchmod/chmod:

#include 

#include

int chmod(const char *path, mode_t mode)

;//檔名

int fchmod(int files, mode_t mode)

;//檔案描述符

#include 

#include

#include

int open(const char *pathname, int flags)

;int open(const char *pathname, int flags, mode_t mode)

;int creat(const char *pathname, mode_t mode)

;

#include 

int close(int fd)

;

#include 

ssize_t read(int fd, void *buf, size_t count)

;

#include 

ssize_t write(int fd, void *buf, size_t count)

;

#include 

#include

off_t lseek(int fd, off_t offset, int whence)

;

#include 

int dup(int oldfd)

;int dup2(int oldfd, int newfd)

;

#include 

#include

int fcntl(int fd, int cmd, ... /* arg */ )

;

struct flock 

;

第乙個成員是加鎖的型別:唯讀鎖,讀寫鎖,或是解鎖。l_start和l_whence用來指明加鎖部分的開始位置,l_len是加鎖的長度,l_pid是加鎖程序的程序id。

乙個程序只能設定某一檔案區域上的一種鎖,如果某一檔案區域已經存在檔案記錄鎖

檔案記錄鎖:

rename:修改檔名或檔案位置

#include 

int rename(const char *oldpath, const char *newpath)

;

#include 

int unlink(const char *pathname)

;int remove(const char *pathname)

;

#include 

#include

int mkdir(const char *pathname, mode_t mode)

;

#include 

int rmdir(const char *pathname)

;

#include 

char *getcwd(char *buf, size_t size)

;

#include 

int chdir(const char *path)

;int fchdir(int fd)

;

#include 

#include

dir *opendir(const char *name)

;struct dirent *readdir(dir *dir)

;int closedir(dir *dir)

;

struct dirent

#include 

#include

#include

int stat(const char *pathname, struct stat *statbuf)

;int fstat(int fd, struct stat *statbuf)

;int lstat(const char *pathname, struct stat *statbuf)

;

struct stat

;

#include 

char *ctime(const time_t *timer);

#include 

struct passwd * getpwuid(uid_t uid)

;

#include 

#include

struct passwd

;

用法:char* fileuser = getpwuid(st.st_uid)->pw_name;

linux C程式設計學習筆記(一)

1.新增檔案 touch 檔名,刪除檔案rm 檔名 2.新增資料夾 mkdir 資料夾名 3.新增並編輯檔案 vi vim 檔名 4.進入 下一層以下的 資料夾 cd 路徑名 5.回到home目錄 cd 6.當前路徑 pwd 7.執行檔案 下一層以下的 路徑 檔名,如果是要執行當前資料夾下的檔案,路...

學習筆記 Linux C程式設計實踐

每天乙個linux命令 學習了 慕課網 linux c語言程式設計基本原理與實踐 簡短的記一下筆記 inlcude先搜尋include環境變數的路徑 inlcude file.h 先搜尋當前目錄 make工具可以把大型專案分成若干模組兒 gcc main.c o main main可以同時執行兩條命...

Linux C程式設計 學習筆記4

指向字串的指標 在c語言中,訪問乙個字串有多種方法 可以用字元陣列存放乙個字串。char string linux c printf s n string 注意是 s string是乙個字元陣列名,它同時也是該字元陣列的首位址,即linuxc這個字串的首位址。同理char p linux c pri...