日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux高级编程补充知识

發布時間:2025/7/25 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux高级编程补充知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

F: 計算機系統結構:

?????-------------------------------

????????????應用程序

???????????-----------------

???????| ?庫函數

?????-------------------------------

????????????系統調用

?????-------------------------------

?????虛擬文件系統 ?| ???進程模塊

?????-(文件模塊)-| ??進程間通信

??????設備文件 ????|

????-------------------------------

?????????? ?

????-------------------------------

?

?

?

G: 內存結構劃分(32b)/存儲空間分配:

?????用戶空間3G:代碼區,字符串常量區,數據區,堆,棧stack

?????內核空間1G

?

?

?

H: 系統數據文件:

?????/etc/passwd:用戶相關的信息/用戶的數據信息 ?

???????eg:root:x:0:0:root:/root:/bin/bash,用‘:’進行分割

??????????用戶者:密碼占位符:用戶的id:用戶所在組的id:用戶的描述信息:用戶的家目錄:用戶登錄后默認使用的shell(shell 應用程序,作用:命令行解釋器)

?

??

h1: /etc/group:組的相關信息

?????eg:bin:x:1:bin,daemon

?????????組名:組密碼占位符:組id:組成員

?

?

h2: 用戶相關操作:

?????struct passwd *getpwnam(const char *name);

?????struct passwd *getpwuid(uid_t uid);

?

?????struct passwd *getpwent(void);

?????void setpwent(void);//定位到文件開頭,反轉

?????void endpwent(void);

?

?

h3: 組相關操作:

?????struct group *getgrnam(const char *name);

?????struct group *getgrgid(gid_t gid);

?

?

?

I: 啟動例程:

????命令行參數:字符串的處理

????argv----字符串的數組;argv[argc] == NULL

?

?

?

J: 位運算:

?????bit 0/1

?????????& |

?????????00 ?0 0

?????????01 ?0 1

?????????10 ?0 1

?????????11 ?1 1

????一個bit跟0相與& 結果是0;跟1相與&,結果是他本身.

????一個bit跟0相或| 結果是他本身;跟1相或|,結果是1.

?

?

?

K: 設置文件權限(權限的掩碼)

???mode_t umask(mode_t mask);

???系統調用

????permission & ~umask

????regular file 0666 & ~0022

?? ??????0b110 110 110

????0b000 010 010/0b111 101 101 取反做與

????????& 0b110 100 100 ?0644

??linux系統提供的umask命令跟umask()系統調用的作用是一樣的

?

?

k1: int chmod(const char *path, mode_t mode);

????int fchmod(int fd, mode_t mode);

??改變文件的存取許可權限

???linux系統提供的chmod命令跟chmod()系統調用作用是一樣的

?

?

k2: int chown(const char *path, uid_t owner, gid_t group);

????int fchown(int fd, uid_t owner, gid_t group);

????int lchown(const char *path, uid_t owner, gid_t group);

??改變文件的用戶ID uid和組ID gid

???chown 命令改變文件的屬主owner和屬組group

?

?

k3: int truncate(const char *path, off_t length);

????int ftruncate(int fd, off_t length);

??將文件的長度截短為length

???如果當前文件的長度要是小于我們的length,其結果與系統有關.

??將文件截短為0時,它屬于一個特例,與open或creat調用設定O_TRUNC標志是一樣的.

?

?

?

L: 硬鏈接以及硬鏈接的限制條件

????1.堆目錄不能硬鏈接

????2.硬鏈接不能跨文件系統/硬鏈接不能跨磁盤分區

?

?

l1: link 創建硬鏈接

??????int link(const char *oldpath, const char *newpath);

?

????symlink 創建符號鏈接 軟鏈接 快捷方式

??????int symlink(const char *oldpath, const char *newpath);

?

????int unlink(const char *pathname);

??????刪除文件名,有可能會刪除文件(當硬鏈接數/inode里的引用計數為0的時候,會刪除文件)

?

?

?

M: rm remove cd 路徑;rm 文件

????int remove(const char *pathname);

?

?

m1: rename

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

?

?

m2: mkdir

?????int mkdir(const char *pathname, mode_t mode);

?

?

m3: rmdir

?????int rmdir(const char *pathname);

????針對空目錄進行刪除.

?

?

?

N: 時間和日期

????time() get time in seconds

????time_t time(time_t *t);

?

???1.出參

???2.返回值

????char *ctime(const time_t *timep);

?????eg: "Wed Jun 30 21:49:08 1993\n"

?

????struct tm *localtime(const time_t *timep); ???返回值是結構體指針

?

????time_t mktime(struct tm *tm);

????char *asctime(const struct tm *tm);

?

?

n1: 時間的字符串表達

????^ ^

????| |asctime

????|

????| struct tm-------->

????| ^ ?|

????|ctime |localtime ?|mktime

????| | ?|

????^---------time_t<---------

????^

????|time

????|

????內核kernel

?

?

?

O: 堆heap

???malloc

???free

???char *ptr;

???char *p;

?????ptr =malloc(1024*sizeof(char));

??....

????p=ptr+512;

?

o1: 元數據 metadata

?????void *realloc(void *ptr, size_t size);//增加空間

?

?

?

P: 前臺/后臺:

????命令 & :表示后臺運行

????fg 后臺進程調入到前臺運行 ?eg:fg %1

bg 前臺進程調入到后臺運行 ?eg:bg %1

????jobs 查看后臺作業/進程

?

?

?

Q: linux如何運行一個程序/如何執行execvp?

????1.將指定的程序/可執行文件加載/復制到調用exec的進程

????2.將給定的字符串數組作為argv傳給這個程序

????3.運行這個程序

?

?

?

R: ?status分為3部分:exit返回值(8b);異常退出號(7b);內核映像(core dump)(1b)

?

?

?

S: 目錄塊/目錄項(inode號和名d_name)

???數據塊

???inode節點表/inode節點數組

?

?

?

T: 自頂向下的程序設計方法 ??????

???分文件:函數數量多的時候,會根據函數的類型分文件

?

???頭文件:宏定義;全局變量的聲明;結構體類型的定義;函數的聲明

?

???分函數:一個函數中代碼數量多的時候,會跟據完成的任務、功能分函數(每個函數的代碼是1-15行)

????分函數通常只做方法處理,數據的輸入和打印輸出通常在主函數中完成

?

?

t1: #include"strcpypt.h" ??// “”----> 當前目錄下優先查找

????#include<string.h> ??// <>----> 在環境變量PATH制定的目錄下優先查找

?

?

t2: #ifndef ??//防止頭文件被重復的包含

?

?

?

U: 服務/客戶:

??????bc----計算器命令(bc----客戶;dc----服務)

??bc是dc的預處理

??bc提供界面處理,使用dc提供的服務,bc是dc的客戶

??bc和dc兩者之間是獨立的程序

??雙向通信

?

?

?

V: 普通文件

???競態文件

???文件鎖/記錄鎖

???fcntl----改變已打開的文件的性質

?加讀數據的鎖

???void set_read_lock(int fd)

???{

??? struct flock lockinfo;

?

lockinfo.l_type = F_RDLCK;

lockinfo.l_whence = SEEK_SET;

lockinfo.l_start = 0;

lockinfo.l_len = 0;

lockinfo.l_pid = getpid();

?

fcntl(fd,F_SETLKW,&lockinfo);

lockinfo.l_type = F_RDLCK;

???}

?

?加寫數據的鎖:

???void set_read_lock(int fd)

???{

??? struct flock lockinfo;

?

lockinfo.l_type = F_WRLCK;

lockinfo.l_whence = SEEK_SET;

lockinfo.l_start = 0;

lockinfo.l_len = 0;

lockinfo.l_pid = getpid();

?

fcntl(fd,F_SETLKW,&lockinfo);

lockinfo.l_type = F_RDLCK;

???}

?

?解鎖:

???void set_read_lock(int fd)

???{

??? struct flock lockinfo;

?

lockinfo.l_type = F_UNLCK;

lockinfo.l_whence = SEEK_SET;

lockinfo.l_start = 0;

lockinfo.l_len = 0;

lockinfo.l_pid = getpid();

?

fcntl(fd,F_SETLKW,&lockinfo);

lockinfo.l_type = F_RDLCK;

???}

?

?

?

W: 函數名---函數的地址/函數的指針

???指針----1,地址 ?2,指針變量

?

?

?

X: 設備文件:

x1: 串口/終端:

??????處理進程和外部設備之間的數據流的內核子程序的集合----被稱為終端驅動程序/tty(TeleTYpe)驅動程序

??

??讀取終端驅動程序的屬性:

???int tcgetattr(int fd, struct termios *termios_p);

??設置終端驅動程序的屬性:

???int tcsetattr(int fd, int optional_actions,const struct termios *termios_p);

?????TCSANOW:立即更新驅動程序的設置

?

??結構體 termios:------------------保存屬性

????tcflag_t c_iflag; ?????/* input modes */-------輸入:驅動程序如何處理從終端來的字符

????tcflag_t c_oflag; ?????/* output modes */-------輸出:驅動程序如何處理流向終端的字符

????tcflag_t c_cflag; ?????/* control modes */--------控制:字符如何被表示(位的個數,停止位等)

????tcflag_t c_lflag; ?????/* local modes */-------本地:驅動程序如何處理來自驅動程序內部的字符

????cc_t ????c_cc[NCCS]; ??/* control chars */

?

=============================================================================================================

書寫步驟:

????????struct termois attribs; ??//保存屬性

????????tcgetattr(fd,&attribs); ??//獲取當前屬性

???//修改:

????????測試位:if(attribs.flagset & MASK)...

置位:attribs.flagset |= MASK;...

清除位:attribs.flagset &|= ~MASK;...

????????tcsetattr(fd,TCSANOW,&attribs); ??//寫回屬性

?-------------------------------------------------------------------------------------------------------------

總結:

????改變終端驅動程序的設置:(Read--Mddify--Write)

????????1.讀取:從驅動程序中獲取當前的屬性 ??

????2.修改:修改所要修改的屬性

????3.寫回:將修改后的屬性去回寫到驅動程序

?-------------------------------------------------------------------------------------------------------------

?===============================================================================================================

轉載于:https://www.cnblogs.com/jfyl1573/p/6250068.html

總結

以上是生活随笔為你收集整理的linux高级编程补充知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。