




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Prerequisite一、Linux 命令1、文件操作列出目錄內(nèi)容: ls, dir, vdir創(chuàng)建特殊文件: mkdir, mknod, mkfifo文件操作: cp, mv, rm修改文件屬性: chmod, chown, chgrp, touch查找文件: locate, find字符串匹配: grep(egrep)其它: pwd, cd, ar, file, grep, tar, more, less, head, tail, cat2、進程操作ps, kill, jobs, fg, bg, nice3、其它who, whoami, passwd, su, uname, man二、L
2、inux工具編輯工具:vi, emacs編譯、鏈接:gcc(GNU C Compiler -> GNU Compiler Collection)調(diào)試:gdbmake命令版本控制工具:CVS等三、編程語言1、High-level Language:C/C+, Java, Fortran2、ELF binary format:Excutable and Linkable Format(工具接口標準委員會(TIS)選擇了正在發(fā)展中的ELF體系上不同操作系統(tǒng)之間可移植的二進制文件格式)四、GCC使用-E: 只對源程序進行預(yù)處理(調(diào)用cpp預(yù)處理器)-S: 只對源程序進行預(yù)處理、編譯-c: 執(zhí)行預(yù)
3、處理、編譯、匯編而不鏈接-o output_file: 指定輸出文件名-g: 產(chǎn)生調(diào)試工具必需的符號信息-O/On: 在程序編譯、鏈接過程中進行優(yōu)化處理-Wall: 顯示所有的警告信息-Idir: 指定額外的頭文件搜索路徑-Ldir: 指定額外的庫文件搜索路徑 -lname: 鏈接時搜索指定的庫文件-DMACRO=DEFN: 定義MACRO宏Gcc過程:預(yù)處理、編譯、匯編、鏈接GDB使用設(shè)置斷點、監(jiān)視變量值、單步執(zhí)行、修改變量值make -f filename targetnameShell編程一、 Shell概述1、Shell 用戶和操作系統(tǒng)之間的接口、作為核外程序而存在2、Shell 的雙
4、重角色1)、命令解釋程序(1)Linux的開機啟動過程:加載BIOS;讀取MBR(Master Boot Record);Boot Loader;加載內(nèi)核;用戶層init依據(jù)inittab文件來設(shè)定運行等級;init進程執(zhí)行rc.sysinit;啟動內(nèi)核模塊;執(zhí)行不同運行級別的腳本程序;執(zhí)行/etc/rc.d/rc.local;執(zhí)行/bin/login程序,進入登錄狀態(tài)(2)進程樹:進程樹是一種進程關(guān)系表示方法。由父進程和子進程兩部分組成。(3)Shell的工作步驟:打印提示符;得到命令行;解析命令;查找文件;準備參數(shù);執(zhí)行命令2)獨立的程序設(shè)計語言解釋器(1)KISS (Keep It Sm
5、all and Stupid)(2)Reusable tools(3)Redirection and pipe二、創(chuàng)建和執(zhí)行Shell程序1、編寫腳本文件(注釋、退出碼(exit 0)2、執(zhí)行腳本文件方法1:$ sh script_file 方法2:chmod +x script_file (chown, chgrp optionally)./script_file方法3:source script_file, or . script_file1、 在當前bash環(huán)境下新建一個子shell來執(zhí)行這個腳本,繼承父Shell的環(huán)境變量,用于執(zhí)行剛修改的初始化文檔,2、這些子shell(即子進程)使
6、腳本并行地,有效率地地同時運行腳本內(nèi)的多個子任務(wù)。由于是在子shell中執(zhí)行,腳本設(shè)置的變量不會影響當前shell。3、source的程序主體是bash,腳本中的$0變量的值是bash,而且由于作用于當前bash環(huán)境,腳本中set的變量將直接起效三、Shell程序設(shè)計的語法1、變量1、用戶變量:(1)定義:用戶在shell腳本里定義的變量(2)賦值和使用:var=valueecho $var(3)read命令:(read -p "Enter your name:" name)read var 或 readREPLY variable(環(huán)境變量REPLY中包含輸入的所有數(shù)據(jù),
7、可以像使用其他變量一樣在shell腳本中使用環(huán)境變量REPLY,當然,在引用的時候不要忘記$)-s:默讀、在輸入密碼時用的到-t:計時輸入,后接等待秒數(shù)(4)引號的用法:雙引號作用:$ , ,這些字符的特殊含義還是存在單引號:忽略所有的特殊字符2、用戶環(huán)境(1).bash_profile, .bash_logout, .bashrc files.bash_profile: 用戶登錄時被讀取,其中包含的命令被bash執(zhí)行.bashrc: 啟動一個新的shell時讀取并執(zhí)行.bash_logout: 登錄退出時讀取執(zhí)行(2)Alias:alias別名=指令名稱,若不加任何參數(shù),則列出目前所有的別名
8、設(shè)置。alias的效力僅及于該次登入的操作。若要每次登入是即自動設(shè)好別名,可在/etc/profile或自己的/.bashrc中設(shè)定指令的別名。Unalias 別名(3)環(huán)境變量:export -fnp變量名稱=變量設(shè)置值-f 代表變量名稱中為函數(shù)名稱。 -n 刪除指定的變量。變量實際上未刪除,只是不會輸出到后續(xù)指令的執(zhí)行環(huán)境中。-p 列出所有的shell賦予程序的環(huán)境變量。env:顯示當前用戶的環(huán)境變量;set:用set 命令可以設(shè)置各種shell選項或者列出shell變量-a 標示已修改的變量,以供輸出至環(huán)境變量。-b 使被中止的后臺程序立刻回報執(zhí)行狀態(tài)。-C 轉(zhuǎn)向所產(chǎn)生的文件無法覆蓋已存
9、在的文件。-d Shell預(yù)設(shè)會用雜湊表記憶使用過的指令,以加速指令的執(zhí)行。-d參數(shù)可取消。-e 若指令傳回值不等于0,則立即退出shell。-f 取消使用通配符。-h 自動記錄函數(shù)的所在位置。-H Shell 可利用"!"加<指令編號>的方式來執(zhí)行history中記錄的指令。-k 指令所給的參數(shù)都會被視為此指令的環(huán)境變量。-l 記錄for循環(huán)的變量名稱。-m 使用監(jiān)視模式。-n 只讀取指令,而不實際執(zhí)行。-p 啟動優(yōu)先順序模式。-P 啟動-P參數(shù)后,執(zhí)行指令時,會以實際的文件或目錄來取代符號連接。-t 執(zhí)行完隨后的指令,即退出shell。-u 當執(zhí)行時使用到未
10、定義過的變量,則顯示錯誤信息。-v 顯示shell所讀取的輸入值。-x 執(zhí)行指令后,會先顯示該指令及所下的參數(shù)。+<參數(shù)> 取消某個set曾啟動的參數(shù)。3、環(huán)境變量(Shell環(huán)境提供的變量。通常使用大寫字母做名字)4、參數(shù)變量和內(nèi)部變量調(diào)用腳本程序時如果帶有參數(shù),對應(yīng)的參數(shù)和額外產(chǎn)生的一些變量。2、條件測試1、字符串比較2、算數(shù)比較3、與文件有關(guān)的條件測試4、邏輯操作5、條件語句(1)形式:(緊湊形式; (同一行上多個命令的分隔符)if expression thenstatementselif expression thenstatementselif elsestatemen
11、tsfi6、case語句(1)形式:case str instr1 | str2) statements;str3 | str4) statements;*) statements;Esac3、重復(fù)語句1、for語句:適用于對一系列字符串循環(huán)處理(1)形式:for var in listdostatementsdone例:#!/bin/shfor file in $(ls f*.sh); do lpr $filedoneexit 02、while語句(1)形式:while conditiondostatementsdone3、until 語句(不推薦使用)(1)形式:until conditi
12、ondostatementsdone4、Select語句:生成菜單列表(1)形式:select item in itemlistdostatementsdone4、命令表業(yè)語句塊1、命令表(1)命令組合分號串聯(lián):command1 ; command2 ; 條件組合:AND命令表:只有在 && 左邊的命令返回真,&& 右邊的命令才會被執(zhí)行格式:statement1 && statement2 && statement3 && OR命令表:只有在 | 左邊的命令返回假,| 右邊的命令才會被執(zhí)行。格式:statement
13、1 | statement2 | statement3 | 2、語句塊(1)形式 statement1 statement2 或 statement1; statement2 ; ; 5、函數(shù)(1)形式function funcname() statements return int(2)局部變量:局部變量只適用于當前shell,local關(guān)鍵字(3)函數(shù)的調(diào)用:func para1 para2 6、其他1、雜項命令:break: 從for/while/until循環(huán)退出continue: 跳到下一個循環(huán)繼續(xù)執(zhí)行exit n: 以退出碼”n”退出腳本運行return: 函數(shù)返回export:
14、將變量導(dǎo)出到shell,使之成為shell的環(huán)境變量set: 為shell設(shè)置參數(shù)變量unset: 從環(huán)境中刪除變量或函數(shù)trap: 指定在收到操作系統(tǒng)信號后執(zhí)行的動作“:”(冒號命令): 空命令“.”(句點命令)或source: 在當前shell中執(zhí)行命令2、find命令(1)形式:find path options tests actionsOptionsTests可以用操作符進行組合測試 :?。?not); -a(-and); -o(-or)可以用圓括號來強制測試和操作符的優(yōu)先級,需要用到轉(zhuǎn)義字符例:find . (-name "_*" -or -newer whil
15、e2) -type f print-amin<n>、-anewer<file>、-atime<n>-cmin<n>、-cnewer<file>、-ctime<n>-empty、-gid<n> or -group<name>、-pid<n>-name<name>, -iname<name>-size<n單位>、-type<c>-ipath<p>, -path<p>路徑名符合p的文件,ipath表示忽略大小寫action
16、s3、grep命令(用于在文件中查找字符串)(1)形式:grep OPTIONS PATTERN FILES(2)正則表達式:廣泛用于Linux和許多其他編程語言中,基本原理都是一樣的注:上表中的括號需要使用轉(zhuǎn)移字符,如 grep E a-z10 words2.txt4、捕獲命令輸出(1)語法:$(command)command(2)例:#!/bin/shecho “The current directory is $PWD”echo “The current directory is $(pwd)”exit 05、算數(shù)擴展(1)expr命令(支持的operator包括)expr argume
17、nt operator argument(2)$()擴展例:x=$($x+1)6、參數(shù)擴展#!/bin/shi=0while “$i” ne 10 ; do touch “$i_tmp” i=$($i+1)doneexit 07、即時文檔在shell腳本中向一條命令傳送輸入數(shù)據(jù)#!/bin/bashcat << !CATINPUT!Hello, this is a here document.!CATINPUT!8、shell腳本調(diào)試*sbin/service:它本身是一個shell腳本程序,作用就是獲取傳遞給它的兩個參數(shù):$1 $2,分別是服務(wù)名和對該服務(wù)的動作。然后調(diào)用 /et
18、c/rc.d/init.d/服務(wù)名稱($1),并給該服務(wù)腳本傳遞你指定的動作($2)。例如:service httpd stop本身就是執(zhí)行:/etc/rc.d/init.d/httpd stop。由httpd腳本去控制httpd服務(wù)的停止動作(stop)。文件系統(tǒng)1、 文件系統(tǒng)定義1、基本定義文件:一個可以被讀寫的對象。文件有一定的屬性,包括訪問權(quán)限和類型文件系統(tǒng):文件和其某一些屬性的集合。它為指向文件的序列號提供了一個名空間文件系統(tǒng)由三部分組成:與文件管理有關(guān)軟件、被管理文件以及實施文件管理所需數(shù)據(jù)結(jié)構(gòu)。文件類型:regular file、character special file、bl
19、ock special file、fifo、socket、symbolic link、directory(普通文件、特殊字符文件、塊文件、命名管道、套接字、符號連接、目錄)文件結(jié)構(gòu):Byte stream; no particular internal structure(字節(jié)流、無特殊內(nèi)部構(gòu)造的文件)*ls l命令2、文件系統(tǒng)層次結(jié)構(gòu)3、文件系統(tǒng)的多種含義:(1)一種特定的文件格式(Ext2、FAT16、NTFS、FAT32)(2)指按照特定格式“格式化”的一塊存儲介質(zhì)(“安裝”、“卸載”一個文件系統(tǒng))(3)指操作系統(tǒng)中(通常指在內(nèi)核中)用來管理文件系統(tǒng)以及對文件進行操作的機制及其實現(xiàn)4、創(chuàng)
20、建一個文件系統(tǒng)(1)創(chuàng)建一個文件:dd if=/dev/zero of=/work/file.img bs=1k count=10000(2)用作塊設(shè)備:losetup /dev/loop0 /work/file.imgmke2fs c /dev/loop0 10000mkdir /mnt/testfsmount t e2fs /dev/loop0 /mnt/testfs5、Linux中的文件系統(tǒng)(VFS:Virtual File system Switch)(1)每個進程通過“打開文件”(open())與具體的文件建立起連接,或者說建立起一個讀寫的上下文。這種連接以一個file數(shù)據(jù)結(jié)構(gòu)為代表
21、,結(jié)構(gòu)中有個file_operations結(jié)構(gòu)指針f_op。(2)將file結(jié)構(gòu)中的指針f_op設(shè)置成指向某個具體的file_operations結(jié)構(gòu)變量,就指定了這個文件所屬的文件系統(tǒng),并與具體文件系統(tǒng)所提供的一組函數(shù)掛上了鉤VFS模型是虛擬的,只在內(nèi)存中出現(xiàn),包含如下組成:super block、i-node object、file object、dentry object(1)超級塊(superblock,了解數(shù)據(jù)結(jié)構(gòu)):s_list:指向超級塊鏈表的指針*s_type:文件系統(tǒng)類型*s_op:超級塊方法s_instances:該類型文件系統(tǒng)(2)索引節(jié)點(inode,了解數(shù)據(jù)結(jié)構(gòu)):*
22、i_op:索引節(jié)點操作表*i_fop:該索引節(jié)點對應(yīng)文件的文件操作集*i_sb:相關(guān)的超級塊(3)目錄(dentry,了解數(shù)據(jù)結(jié)構(gòu))目錄項對象,一個路徑的各個組成部分,不管是目錄還是文件,都是一個dentry對象*d_inode:相關(guān)的索引節(jié)點*d_parent:父目錄的目錄項對象d_name:目錄項的名字d_subdirs:子目錄*d_op:目錄項操作表*d_sb:文件超級塊目錄項布局:目錄項內(nèi)容包括索引節(jié)點編號, 目錄項名稱長度以及名稱本身。(4)文件(file) 已打開的文件在內(nèi)存中的表示:6、進程和文件系統(tǒng)7、Ext2文件系統(tǒng)(1)GDT(group descriptor table)
23、每個塊組信息,例如inode表起始位置;數(shù)據(jù)區(qū)起始位置,所有這些塊組描述符構(gòu)成GDT;每個group中都有一份GDT,以做備份(2)Block bitmap: 塊位圖描述block group中每個block是否被使用;本身占據(jù)一個block,每個block占據(jù)一個bit,假設(shè)block大小是1024 byte;那么總共可以描述:1024*8=8192 個block信息,1:表示已占用;0表示未占用(3)Inode bitmap(4)Inode table塊組中所有的inode構(gòu)成inode表,每個inode對應(yīng)一個物理文件;Inode table的空間大小在格式化時候決定;Mke2fs默認塊
24、組有多少個8KB,就分配多少個inode(5)data block對于常規(guī)文件,文件的數(shù)據(jù)存儲在數(shù)據(jù)塊中目錄文件:該目錄下所有的文件名和目錄名存儲在數(shù)據(jù)塊中符號鏈接:如果目標路徑名較短則直接保存在inode中以便更快地查找,如果目標路徑名較長則分配一個數(shù)據(jù)塊來保存設(shè)備文件:fifo,socket文件等沒有數(shù)據(jù)塊,設(shè)備文件的major ,minor number保存在inode中* 目錄:一種特殊文件, 其文件內(nèi)容是該目錄中的目錄項8、Hard Link、Soft Link(1)Hard link不同的文件名對應(yīng)同一個inode不能跨越文件系統(tǒng)對應(yīng)系統(tǒng)調(diào)用link(2)Symbolic link
25、存儲被鏈接文件的文件名(而不是inode)實現(xiàn)鏈接可跨越文件系統(tǒng)對應(yīng)系統(tǒng)調(diào)用symlink9、數(shù)據(jù)塊尋址(1)Inode->block15數(shù)組(2)Block12-14:間接索引Block12:b/4Block13:b/4*b/4Block14:b/4*b/4*b/42、系統(tǒng)調(diào)用和庫函數(shù)1、比較:相同點:都以C函數(shù)的形式出現(xiàn)不同點:系統(tǒng)調(diào)用:Linux內(nèi)核的對外接口; 用戶程序和內(nèi)核之間唯一的接口; 提供最小接口庫函數(shù):依賴于系統(tǒng)調(diào)用; 提供較復(fù)雜功能2、可緩沖和非緩沖的I/O(1)Unbuffered I/Oread/write ->System callsFile descri
26、ptor不在標準化C中,但是存在于POSIX.1和XPG3(2)Buffered I/O用標準I/O實現(xiàn)處理很多細節(jié), 如緩存分配, 以優(yōu)化長度執(zhí)行I/O等.Stream -> a pointer to FILE3、基本I/O系統(tǒng)調(diào)用1、文件描述符:無符號整數(shù)表示的句柄 在<unistd.h>中定義的:STDIN_FILENO (0), STDOUT_FILENO (1), STDERR_FILENO (2) 打開文件操作基本流程:open-read/write-lseek-close2、基本I/O操作3、錯誤處理(1)采用UNIX風格,返回錯誤代號”errno”,errno
27、變量和錯誤代碼都在頭文件 /usr/include/errno.h 中定義(2)strerror & perrorchar *strerror(int errnum); void perror(const char *msg);4、open/creat函數(shù)(打開或者有可能創(chuàng)建一個文件)#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags);int open(const char *pathname
28、, int flags, mode_t mode); int creat(const char *pathname, mode_t mode);* creat(pathname, mode)等價于open(pathname, O_WRONLY|O_CREAT|O_TRUNC, mode)返回值:成功時返回文件的描述符,失敗時返回-1參數(shù):(1)flags(除了O_RDONLY、O_WRONLY 、 O_RDWR以外的):O_APPEND:以追加方式打開O_TRUNC::如果文件已經(jīng)存在并且是一個普通文件且打開方式允許寫操作,則文件長度被截0O_CREAT:如果文件不存在則創(chuàng)建O_EXCL:如果
29、文件已經(jīng)存在則錯誤返回(2)mode:如果新文件被創(chuàng)建設(shè)置其屬性*umask機制:新創(chuàng)建文件的權(quán)限為:mode & umask目錄默認:777,文件默認:6665、close函數(shù)#include <unistd.h>int close(int fd);返回值:成功則返回0,失敗則返回16、read/write函數(shù)#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);返回值: 讀到的字節(jié)數(shù),若已到文件尾為0,若出錯為-1ssize_t write(int fd, const void *b
30、uf, size_t count);返回值: 若成功為已寫的字節(jié)數(shù),若出錯為-17、lseek函數(shù):定位文件中的讀寫位置#include <sys/types.h>#include <unistd.h>off_t lseek(int fildes, off_t offset, int whence);返回值:如果成功則返回地址的偏移量,失敗則返回-1參數(shù)whence:SEEK_SET: 從文件開頭計算偏移量SEEK_CUR: 從文件當前的位置開始計算偏移量SEEK_END: 從文件結(jié)尾的位置開始計算偏移量8、dup/dup2函數(shù):復(fù)制文件描述符*文件描述符在形式上是一個
31、非負整數(shù)。實際上,它是一個索引值,指向內(nèi)核為每一個進程所維護的該進程打開文件的記錄表。dup返回新的文件文件描述符(沒有用的文件描述符最小的編號)。dup2可以讓用戶指定返回的文件描述符的值,如果需要,則首先接近newfd的值,他通常用來重新打開或者重定向一個文件描述符。#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);返回值:成功則返回文件新的描述符,失敗則返回-19、文件共享與原子操作不同進程間共享打開文件:進程表項文件表i節(jié)點表10、fcntl函數(shù):對指定的描述符對應(yīng)的文件進行操作#inc
32、lude <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struct flock *lock);返回值: 若成功則依賴于cmd,若出錯為-1F_DUPFD: 用來查找大于或等于參數(shù)arg的最小且仍未使用的文件描述詞,并且復(fù)制參數(shù)fd的文件描述詞。F_GETFD/F_SETFD: 取得/設(shè)置close-on-exec旗標。F_GETFL/F_SETFL: 取得/設(shè)置文件描述詞狀態(tài)旗標
33、F_GETOWN/F_SETOWN: 管理可用的I/O信號F_GETLK/F_SETLK/F_SETLKW: 取得/設(shè)置文件鎖定的狀態(tài),后者若連接斷開則直接錯誤返回11、ioctl函數(shù):控制設(shè)備,提供了一種獲得設(shè)備信息和向設(shè)備發(fā)送控制參數(shù)的手段。#include <sys/ioctl.h>int ioctl(int d, int request, .);4、標準I/O庫1、文件流(1)結(jié)構(gòu):Stream and “FILE” structureFILE* fp;Predefined pointer: stdin, stdout, stderr(2)可緩沖的I/O三種緩沖方式:全緩沖
34、、行緩沖、不緩沖2、open/close函數(shù):#include <stdio.h>FILE *fopen(const char *filename, const char *mode);int fclose(FILE *stream);參數(shù):Mode:“r”(只讀)、“w”(覆蓋原有內(nèi)容)、“a”(追加寫)、“r+”(可讀寫)、 “w+”(可讀寫、如果不存在則創(chuàng)建,已有內(nèi)容則覆蓋)、“a+”(可讀可追加,如果不存在則創(chuàng)建)3、close函數(shù)#include <stdio.h>int fclose(FILE *fp);返回值:成功返回0,失敗返回-13、字符輸入:從流中讀
35、取一個字符,作為從無符號char轉(zhuǎn)換成int返回,如果到末尾返回EOF#include <stdio.h>int getc(FILE *fp);int fgetc(FILE *fp);int getchar(void);*ungetchar將字符送回流中4、字符輸出:#include <stdio.h>int putc(int c, FILE *fp);int fputc(int c, FILE *fp);int putchar(int c);5、一行字符串輸入:fgets, gets functions,讀取最多size-1個字符,存入s中(s最后一個字符為0),遇到
36、EOF則停止讀?。?include <stdio.h>char *fgets(char *s, int size, FILE *stream);char *gets(char *s); /not recommended.6、一行字符串的輸出:fputs, puts functions#include <stdio.h>int fputs(const char *s, FILE *stream);int puts(const char *s);7、二進制流輸入/輸出#include <stdio.h>size_t fread(void *ptr, size_t
37、 size, size_t nmemb, FILE *stream);size fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);8、格式化I/O(1)scanf, fscanf, sscanf functions不推薦,使用fgets(),然后解析字符串#include <stdio.h>int scanf(const char *format, .);int fscanf(FILE *stream, const char *format, .);int sscanf(const char *str,
38、 const char *format, .);(2)printf, fprintf, sprintf functions#include <stdio.h>int printf(const char *format, .);int fprintf(FILE *stream, const char *format, .);int sprintf(char *str, const char *format, .);9、流的重定位:(1)fseek, ftell, rewind functions#include <stdio.h>int fseek(FILE *strea
39、m, long int offset, int whence);long ftell(FILE *stream);void rewind(FILE *stream);(2)fgetpos, fsetpos functions ( Introduced in ANSI C)#include <stdio.h>int fgetpos(FILE *fp, fpos_t *pos);int fsetpos(FILE *fp, const fpos_t *pos);10、fflush()函數(shù):刷新文件流。把流里的數(shù)據(jù)立刻寫入文件#include <stdio.h>int fflu
40、sh(FILE *stream);11、流緩沖操作#include <stdio.h>void setbuf(FILE *stream, char *buf);int setvbuf(FILE *stream, char *buf, int mode, size_t size);12、流描述符操作(1)確定流使用的底層文件描述符#include <stdio.h>int fileno(FILE *fp);(2)根據(jù)已打開的文件描述符創(chuàng)建一個流#include <stdio.h>FILE *fdopen(int fildes, const char *mode
41、);13、臨時文件(1)為臨時文件創(chuàng)建名字#include <stdio.h>char *tmpnam(char *s);返回值: 指向唯一路徑名的指針(2)創(chuàng)建一個臨時文件#include <stdio.h>FILE *tmpfile(void);返回值: 若成功為文件指針,若出錯為NULL5、UNIX標準化ISO C:提供C程序的可移植性,在不同的操作系統(tǒng)上運行,不只是UNIX系統(tǒng)POSIX(Portable operating system interface):操作系統(tǒng)接口;UNIX系統(tǒng)間應(yīng)用程序的可移植性SUS(Single UNIX specificatio
42、n):擴展了POSIX接口1、標準化實現(xiàn):POSIX.1:SVR4、4.4BSD、FreeBSD、Linux、MAC OS XSUS:Solaris2、UNIX限制(1)編譯時限制:短整型的最大值是多少、在頭文件中定義、ISO C limits 定義(limits.h stdio.h)(2)運行時限制:文件名長度最大是多少、POSIX限制、SUS 限制3、運行時確定<limits.h>中不一定定義所有值4、I/O效率問題隨著BufferSize的增長,時間開始時快速下降,BufferSize到達某一值時,時間趨向平穩(wěn)6、文件共享1、文件與進程的關(guān)系(1)不同的進程可以打開同一個文件
43、(2)打開的文件在內(nèi)核的表示:fd、file、vnode/inode2、幾點注意的地方write對offset的影響、O_APPEND模式對offset的影響、lseek對offset影響3、文件共享中的flags(1)fd flagsfcntl(fd, F_GETFD/F_SETFD,arg)(2)file flagsfcnt(fd, F_GETFL/F_SETFL,arg)(3)file share多進程共享寫操作會發(fā)生什么情況?lseek,write-O_APPEND多進程共享創(chuàng)建文件會發(fā)生什么?open,create-O_EXCL4、Linux文件緩存機制7、高級系統(tǒng)調(diào)用1、stat/
44、fstat/lstat 函數(shù):獲取文件狀態(tài)#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *file_name, struct stat *buf);int fstat(int filedes, struct stat *buf);int lstat(const char *file_name, struct stat *buf);返回值:成功則返回0,失敗則返回-1*stat數(shù)據(jù)結(jié)構(gòu)了解2、文件類型的宏定義<sys/stat.h>
45、3、文件權(quán)限(Linux中文件的權(quán)限可以用4個8進制表示)S G T R W X R W X R W Xchmod 777 /test/perm.testls l /usr/bin/passwd: -rwsr-xr-xst_mode & S_IRUSR4、粘滯位(只對目錄有效)(1)粘住位本來是針對可執(zhí)行的程序文件,S_ISVTX (saved_text bit, 保存正文位) (2)現(xiàn)今的系統(tǒng)擴展了粘住位的使用范圍,Single UNIX Specification允許針對目錄設(shè)置粘住位。(3)如果對一個目錄設(shè)置了粘住位,則只有對該目錄有寫權(quán)限的用戶在滿足下列條件之一的情況下,才能刪
46、除或更名該目錄下的文件:擁有此文件、擁有此目錄、是超級用戶。(4)目錄/tmp和/var/spool/uucppublic是典型的設(shè)置粘住位的目錄。任何用戶都可以在這兩個目錄中創(chuàng)建文件,任一用戶(用戶、組或其他)對這兩個目錄的權(quán)限通常都是讀、寫和執(zhí)行,但用戶不能刪除或更名其他人的文件。為此,在這兩個目錄的文件模式中都設(shè)置了粘住位。5、euid, guid:進程訪問資源的依據(jù)SUID的功能是改變進程的euidSUID的優(yōu)先級比SGID高,當一個可執(zhí)行程序設(shè)置了SUID,則SGID會自動變成相應(yīng)的egid6、access函數(shù):按實際用戶ID和實際組ID測試文件存取權(quán)限#include <un
47、istd.h>int access(const char *pathname, int mode);7、umask函數(shù):為進程設(shè)置文件存取權(quán)限屏蔽字,并返回以前的值#include <sys/types.h>#include <sys/stat.h>mode_t umask(mode_t mask);8、chmod/fchmod 函數(shù):改變文件的權(quán)限#include <sys/types.h>#include <sys/stat.h>int chmod(const char *path, mode_t mode);int fchmod(in
48、t fildes, mode_t mode);自動清理兩個權(quán)限位:不需要超級用戶的權(quán)限來去除粘滯位Sgid cleard for:Without superuser privilege and gid not equals egid9、chown/fchown/lchown 函數(shù):更改文件的所有者#include <sys/types.h>#include <unistd.h>int chown(const char *path, uid_t owner, gid_t group);int fchown(int fd, uid_t owner, gid_t group)
49、;int lchown(const char *path, uid_t owner, gid_t group);10、文件的大小索引節(jié)點和目錄關(guān)系:Stat function 獲取信息的來源自inode和dentry每個文件系統(tǒng)各自對inode編號,所以ln不能跨越文件系統(tǒng)文件命名操作:創(chuàng)建一個新的dentry對象,刪除舊的連接11、link/unlink函數(shù)創(chuàng)建連接:#include <unistd.h>int link(const char *oldpath, const char *newpath);刪除鏈接:#include <unistd.h>int unli
50、nk(const char *pathname);12、符號連接13、symlink/readlink函數(shù):創(chuàng)建一個符號連接#include <unistd.h>int symlink(const char *oldpath, const char *newpath);讀取一個符號鏈接#include <unistd.h>int readlink(const char *path, char *buf, size_t bufsiz);14、文件的時間15、utime函數(shù):16、目錄操作創(chuàng)建一個空目錄#include <sys/stat.h>#include
51、<sys/types.h>int mkdir(const char *pathname, mode_t mode);創(chuàng)建:記得賦予可執(zhí)行權(quán)限刪除一個空目錄#include <unistd.h>int rmdir(const char *pathname);刪除:鏈接為0并且沒有進程打開這個目錄改變工作目錄#include <unistd.h>int chdir(const char *path);int fchdir(int fd);當前工作目錄是進程的屬性,所以該函數(shù)只影響調(diào)用chdir的進程本身獲得當前工作目錄的絕對路徑#include <unis
52、td.h>char *getcwd(char *buf, size_t size);17、讀取路徑數(shù)據(jù)結(jié)構(gòu):DIR:目錄流對象的數(shù)據(jù)類型struct dirent:目錄項方法:目錄的打開、關(guān)閉、讀、定位#include <sys/types.h>#include <dirent.h>DIR *opendir(const char *name);int closedir(DIR *dir);struct dirent *readdir(DIR *dir);off_t telldir(DIR *dir);void seekdir(DIR *dir, off_t off
53、set);st_dev/st_rdev文件所在存儲系統(tǒng)的設(shè)備號字符設(shè)備/塊設(shè)備自己的設(shè)備號8、高級I/O1、文件鎖記錄鎖:讀鎖(共享鎖)、寫鎖(獨占鎖)2、fcntl記錄鎖用于記錄鎖的fcntl函數(shù)原型#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd, struct flock *lock);cmd參數(shù)的取值F_GETLK:獲得文件的封鎖信息F_SETLK:對文件的某個區(qū)域封鎖或解除封鎖F_SETLKW:功能同F(xiàn)_SETLK, wait方式。3、文件封鎖競爭現(xiàn)象9、系統(tǒng)數(shù)據(jù)文件和信息1、系統(tǒng)數(shù)據(jù)
54、文件:passwd文件,shadow文件,組文件,.2、存取passwd文件信息的函數(shù)根據(jù)uid或登錄名查看相關(guān)記錄#include <sys/types.h>#include <pwd.h>struct passwd *getpwuid(uid_t uid);struct passwd *getpwnam(const char *name);查看整個口令文件#include <sys/types.h>#include <pwd.h>struct passwd *getpwent(void);返回值:若成功為指針,若出錯或到達文件尾端為NULLv
55、oid setpwent(void);void endpwent(void);3、存取group文件信息的函數(shù)根據(jù)gid或組名查看相關(guān)記錄#include <sys/types.h>#include <grp.h>struct group *getgruid(gid_t gid);struct group *getgrnam(const char *name);查看整個組文件#include <sys/types.h>#include <grp.h>struct group *getgrent(void);返回值:若成功為指針,若出錯或到達文件尾端為NULLvoid setgrent(void);void endgrent(void);4、附加組ID存取和設(shè)置附加組ID的函數(shù)#include <sys/types.h>#include <unistd.h>int getgroups(int gidsetsize, g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3683-2024 水松紙卷筒料圓壓圓燙金機
- 二零二五年度房屋租賃合同(含瑜伽館)
- 2025年度肥料產(chǎn)品包裝設(shè)計及印刷合同
- 2025年度綠色生態(tài)果園轉(zhuǎn)讓協(xié)議書
- 二零二五年度智慧城市建設(shè)項目業(yè)績提成合同
- 天津市2025年度勞動合同解除經(jīng)濟補償金支付與發(fā)放合同
- 二零二五年度科研機構(gòu)與高校人才合作就業(yè)協(xié)議書范本
- 二零二五年度臨時協(xié)議書:智慧社區(qū)建設(shè)與物業(yè)管理合作
- 2025年度智能車庫租賃與智慧城市建設(shè)項目合同
- 2025年度裝配行業(yè)人才培養(yǎng)終止合同協(xié)議
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫附帶答案詳解
- 廣州2025年廣東廣州市番禺區(qū)小谷圍街道辦事處下屬事業(yè)單位招聘5人筆試歷年參考題庫附帶答案詳解
- CentOS 7系統(tǒng)配置與管理(Linux 試題庫) 習(xí)題答案 (楊海艷 第2版)
- 手機直連衛(wèi)星的可用頻率分析
- 2025年春新人教版歷史七年級下冊課件 第16課-明朝的對外關(guān)系
- 施工單位工程質(zhì)量自評報告三篇
- 《家畜環(huán)境衛(wèi)生學(xué)》課件
- 2025年碳化硅(SiC)市場分析現(xiàn)狀
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 2024年沙洲職業(yè)工學(xué)院高職單招語文歷年參考題庫含答案解析
- 2024年廣東省《輔警招聘考試必刷500題》考試題庫【學(xué)生專用】
評論
0/150
提交評論