版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第6章文件系統(tǒng)內(nèi)筒提要Linux文件系統(tǒng)概述文件的基本操作文件屬性操作目錄操作文件系統(tǒng)操作標準I/O函數(shù)庫6.1Linux文件系統(tǒng)概述文件系統(tǒng)概述
文件系統(tǒng)將文件作為用戶存儲數(shù)據(jù)的基本單位,文件可視作由若干字節(jié)構(gòu)成的字節(jié)流,并將字節(jié)流以文件名的形式加以標識,為了便于管理,引入目錄,將文件以層次結(jié)構(gòu)分類組織;,目錄可看做一種特殊類型的文件,其內(nèi)容由若干目錄項組成,目錄項建立文件名與i節(jié)點的映射關(guān)系。
Linux系統(tǒng)支持多種類型的文件系統(tǒng),為了封裝特定文件系統(tǒng)的特性,Linux內(nèi)核將各種文件系統(tǒng)統(tǒng)一在虛擬文件系統(tǒng)的框架下。文件系統(tǒng)架構(gòu)頁高速緩存(pagecache)硬件設(shè)備系統(tǒng)調(diào)用接口層虛擬文件系統(tǒng)(VFS)字符設(shè)備驅(qū)動通用塊設(shè)備層網(wǎng)絡(luò)設(shè)備驅(qū)動ext2fatnfsminix網(wǎng)絡(luò)協(xié)議I/O調(diào)度層底層塊設(shè)備驅(qū)動1底層塊設(shè)備驅(qū)動n底層塊設(shè)備驅(qū)動2openreadwriteclosestatlseek虛擬文件系統(tǒng)VFS
虛擬文件系統(tǒng)(VFS)是一種基于內(nèi)存的抽象文件系統(tǒng),它提供了一種將各種真實文件系統(tǒng)粘結(jié)在一起的框架,同樣由超級塊、i節(jié)點和目錄項等對象組成,并分別為它們定義了一組抽象的操作接口。從而隔離了具體文件系統(tǒng)的特性,為上層應(yīng)用提供了一致的編程接口。
Linux內(nèi)核啟動時將所需的文件系統(tǒng)通過VFS建立一顆目錄樹,根文件系統(tǒng)作為其主干,其他文件系統(tǒng)掛載至相應(yīng)的分支。文件系統(tǒng)的結(jié)構(gòu)
超級塊是文件系統(tǒng)的組織者和管理者,負責對i節(jié)點表和數(shù)據(jù)區(qū)等對象的管理,i節(jié)點存儲文件除名字外的所有信息,其中包括文件內(nèi)容在數(shù)據(jù)區(qū)的分布,邏輯塊是數(shù)據(jù)區(qū)的基本存儲單位,目錄是一種特殊文件,其內(nèi)容存儲文件的入口信息。文件系統(tǒng)引導(dǎo)塊超級快數(shù)據(jù)塊i-節(jié)點表數(shù)據(jù)區(qū)...01678910111213n-2n-1n14文件/目錄大小創(chuàng)建日期修訂日期訪問日期歸屬數(shù)據(jù)分布i-節(jié)點247.520..610test611demo.c613demo.o620demostruct
dirent{
ino_t
d_ino;chard_name[NAME_MAX+1];}i-節(jié)點號文件名目錄項的數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)塊11的內(nèi)容分類API功能描述文件基本I/O操作open/close/unlink打開/創(chuàng)建/關(guān)閉/刪除文read/write讀/寫文件readv/writev分散輸入/集中輸出pread/pwrite基于特定偏移量的讀/寫lseek定位讀寫操作的位置truncate文件截斷dup/dup2復(fù)制文件描述符文件屬性操作Stat/fstat/lstat獲取文件的屬性信息chmod設(shè)置文件的權(quán)限chown設(shè)置文件的屬主/屬組fcntl設(shè)置文件的操作目錄操作mkdir/rmdir創(chuàng)建/刪除目錄chroot/chdir改變進程的根目錄和工作目錄opendir打開目錄readdir讀目錄closedir關(guān)閉目錄nftw遍歷目錄樹文件系統(tǒng)操作mount/umount掛載/卸載文件系統(tǒng)statvfs獲取文件系統(tǒng)的相關(guān)信息fsync/syncfs同步文件/文件系統(tǒng)標準I/O庫fopen/fclose打開/關(guān)閉文件fread/fwrite讀/寫文件應(yīng)用編程接口6.2文件的基本操作內(nèi)容提要基本I/O操作分散輸入和集中輸出基于特定偏移量的I/O操作設(shè)置偏移量文件截斷
I/O重定向基本I/O操作
讀寫文件時,需將數(shù)據(jù)在文件中的位置(偏移量)換算成數(shù)據(jù)在設(shè)備中的邏輯塊號,該過程需借助i節(jié)點,因此,在讀寫文件前,應(yīng)根據(jù)文件的路徑名找到對應(yīng)的i節(jié)點,這正是打開文件操作的任務(wù)。為了提高磁盤I/O性能,系統(tǒng)為每個打開的文件構(gòu)建內(nèi)核緩沖區(qū),讀操作首先搜索該緩沖區(qū),在未命中時才真正向設(shè)備發(fā)起讀請求,寫操作時,只需將數(shù)據(jù)寫入緩沖區(qū),僅在必要時,才真正將數(shù)據(jù)寫入設(shè)備。內(nèi)核為每個打開的文件分配一個偏移量指針,指向當前讀寫位置,文建剛打開時,其值為0,隨著讀寫操作的進行,指針向后作相應(yīng)移動,必要時,可調(diào)整至所需位置。打開/關(guān)閉/刪除操作頭文件 #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h>函數(shù)原型 intopen(constchar*pathname,intflags); intopen(constchar*pathname,intflags,mode_tmode); intclose(intfd); intunlink(constchar*pathname);功能 打開/創(chuàng)建/關(guān)閉/刪除文件。參數(shù) pathname:文件的路徑名。 flags:文件的操作模式。 mode:新建文件的權(quán)限分配。 fd:文件描述符。返回值 成功返回文件描述符,否則返回-1。打開文件inode
file…filesfs...
task_struct…filesfs...
task_struct進程1進程2file打開的文件描述i節(jié)點012012標準輸入標準輸出標準錯誤…f_dentryf_posf_op...…f_dentryf_posf_op...…i_sbi_op…d_named_inoded_named_inoded_named_inoded_named_inoded_named_inoded_named_inodedentry文件描述符打開的文件描述打開文件(續(xù))
每個進程均有一個文件描述符表,用于記錄打開的文件,內(nèi)核為每個打開的文件創(chuàng)建一個文件描述,用于記錄打開文件的狀態(tài),其地址記錄在文件描述符表的某個單元中,單元的下標便是打開文件操作的返回值。一個文件描述可能會被多個進程或一個進程的多個文件描述符引用,例如,創(chuàng)建的子進程,子進程會繼承父進程的文件描述符表,復(fù)制的文件描述符會共享文件描述。若進程源自登錄shell,其文件描述符表的前三個單元通常處于打開狀態(tài),它們依次對應(yīng)標準輸入、標準輸出和標準錯誤輸出。關(guān)閉文件
當關(guān)閉文件時,對應(yīng)文件描述的引用次數(shù)減1,當引用次數(shù)為0時,對應(yīng)的文件描述被內(nèi)核回收,若此時內(nèi)核緩沖區(qū)中尚有未回寫的數(shù)據(jù),內(nèi)核回將數(shù)據(jù)同步至設(shè)備。只有當打開文件上的所有引用全部關(guān)閉時,文件才能被刪除。
讀/寫文件頭文件
#include<unistd.h>函數(shù)原型
ssize_t
read(int
fd,void*buf,size_tcount);
ssize_t
write(int
fd,constvoid*buf,size_tcount);功能 讀/寫文件。參數(shù)
fd:文件描述符。
buf:緩沖區(qū)地址。
count:讀/寫字節(jié)數(shù)。返回值 成功,返回讀/寫的字節(jié)數(shù),錯誤,返回-1。讀/寫文件(續(xù))
讀寫文件時,根據(jù)文件描述符可定位關(guān)聯(lián)的文件描述,由于文件描述存儲了對應(yīng)i節(jié)點的地址,可進一步找到對應(yīng)的i節(jié)點,利用i節(jié)點中數(shù)據(jù)的分布信息,結(jié)合當前讀寫的偏移量,可計算出需要讀寫數(shù)據(jù)在設(shè)備上的位置,最終發(fā)起讀寫請求,真正完成數(shù)據(jù)的讀寫。實例分析
int
fds=open(argv[1],O_RDONLY);
int
fdt=open(argv[2],O_WRONLY|O_CREAT,0666);
ssize_t
len; while((len=read(fds,buf,BUFSIZ))>0)
write(fdt,buf,len);
close(fds);
close(fdt);分散輸入和集中輸出頭文件
#include<sys/uio.h>函數(shù)原型
ssize_t
readv(int
fd,conststruct
iovec*iov,int
iovcnt);
ssize_t
writev(int
fd,conststruct
iovec*iov,int
iovcnt);功能 數(shù)據(jù)的分散讀出/集中寫入。參數(shù)
fd:文件描述符。
iovec:緩存向量。
iovcnt:緩存的數(shù)量。返回值 成功,返回讀寫的字節(jié)數(shù),失敗,返回-1。當保存讀寫數(shù)據(jù)的緩存地址不連續(xù)時,可使用分散輸入和集中輸出面向特定偏移量的讀寫操作頭文件
#include<unistd.h>函數(shù)原型
ssize_t
pread(int
fd,void*buf,size_tcount,off_toffset);
ssize_t
pwrite(int
fd,constvoid*buf,size_tcount,off_toffset);功能 基于特定偏移量的讀/寫文件。參數(shù)
fd:文件描述符。
buf:緩沖區(qū)地址。
count:字節(jié)數(shù)。
offset:偏移量。返回值 成功,返回讀寫的字節(jié)數(shù),失敗,返回-1。 可避免對個進程同時競爭文件偏移量,適用于多個進程/線程同時存取文件的不同區(qū)域。設(shè)置當前偏移量頭文件
#include<sys/types.h> #include<unistd.h>函數(shù)原型
off_t
lseek(int
fd,off_toffset,intwhence);功能 設(shè)置文件的當前偏移量。參數(shù)
fd:文件描述符。
offset:偏移量。
whence:參照坐標。返回值 成功,返回距文件頭的字節(jié)數(shù),失敗,返回-1。
文件截斷
文件寫操作時,設(shè)備上存儲數(shù)據(jù)的邏輯塊,會依次映射至文件的線性空間,邏輯塊時文件存儲數(shù)據(jù)的最小單位,通常文件的最后一個邏輯塊會有剩余,從而造成一定程度的浪費。若寫入文件的字節(jié)不連續(xù),則未寫入部分會形成空隙,若空隙中存在未映射的邏輯塊,則未映射部分形成空洞。文件截斷和重置偏移量均有可能產(chǎn)生空隙。文件截斷操作頭文件
#include<unistd.h> #include<sys/types.h>函數(shù)原型
int
truncate(constchar*path,off_tlength);
int
ftruncate(int
fd,off_tlength);功能 文件截斷。參數(shù)
path:文件路徑。
fd:文件描述符。
length:文件長度。返回值 成功,返回0,失敗,返回-1。
文件空襲...文件空洞(2個邏輯塊)文件空隙(10.5k)扇區(qū)(512字節(jié))文件大小(13.5k)映射映射邏輯塊(4k)磁盤空間文件(字節(jié)流)/O重定向shell在加載可執(zhí)行文件時,通過創(chuàng)建子進程,在子進程中加載可執(zhí)行程序?qū)崿F(xiàn)命令的運行。
I/O重定向可通過在子進程加載可執(zhí)行文件前,改變子進程的運行環(huán)境,修改標準輸入輸出所指的文件描述。這可通過復(fù)制文件描述副和close-open來實現(xiàn)。復(fù)制文件描述符頭文件
#include<unistd.h>函數(shù)原型
int
dup(int
oldfd);
intdup2(intoldfd,int
newfd);功能 復(fù)制文件描述符。參數(shù)
oldfd:原文件描述符。
newfd:新文件描述符。返回值 成功返回副本的文件描述符,失敗返回-1。實例分析int
main(int
argc,char*argv[]){ if(argc!=2){
printf("Usage:%sfilename\n",argv[0]); exit(1); }
int
fd=open(argv[1],O_WRONLY|O_CREAT,0644);
intfd1=dup2(fd,1);
printf("hellodup2:%d\n",fd1);
write(fd,"endofprogram\n",15); return0;}6.3文件屬性操作內(nèi)容提要文件屬性概述獲得文件屬性修改文件訪問權(quán)限改變文件的歸屬設(shè)置文件行為屬性文件屬性概述structstat{
dev_t
st_dev; //文件的設(shè)備編號
ino_t
st_ino; //i節(jié)點號
mode_t
st_mode; //文件的類型和存取權(quán)限
nlink_t
st_nlink; //硬鏈接數(shù)量,即引用次數(shù)
uid_t
st_uid; //屬主ID
gid_t
st_gid; //屬組ID
dev_t
st_rdev; //設(shè)備類型
off_t
st_off; //文件字節(jié)數(shù)
unsignedlongst_blksize; //塊大小
unsignedlongst_blocks; //塊數(shù),一塊大小為512字節(jié)
time_t
st_atime; //最后一次訪問時間
time_t
st_mtime; //最后一次修改時間
time_t
st_ctime; //最后一次改變時間(指屬性)};0121415文件類型其他用戶屬組屬主擴展權(quán)限i節(jié)點存儲文件屬性,其結(jié)構(gòu)和內(nèi)容與文件系統(tǒng)有關(guān),為了隔離文件系統(tǒng)特性,Linux系統(tǒng)定義類型為stat的數(shù)據(jù)結(jié)構(gòu),并配合stat核心函數(shù),降獲取的文件屬性存儲于stat類型的實例。獲取文件屬性頭文件
#include<sys/stat.h> #include<unistd.h>函數(shù)原型
int
stat(constchar*pathname,structstat*buf);
int
fstat(int
fd,structstat*buf);
int
lstat(constchar*pathname,structstat*buf);功能 獲取文件的狀態(tài)屬性。參數(shù)
pathname:文件的路徑名。
filedes:文件描述符。
buf:指向文件屬性地址。返回值 成功,返回0,失敗,返回-1。實例分析intret=stat(argv[1],&sb);if(ret==-1)err(1,"%s",argv[1]);printf("Filetype:");switch(sb.st_mode&S_IFMT){ caseS_IFBLK:printf("blockdevice\n");break; caseS_IFCHR:printf("characterdevice\n");break; caseS_IFDIR:printf("directory\n");break; caseS_IFIFO:printf("FIFO/pipe\n");break; caseS_IFLNK:printf("symlink\n");break; caseS_IFREG:printf("regularfile\n");break; caseS_IFSOCK:printf("socket\n");break;
default:printf("unknown?\n");break;}修改文件訪問權(quán)限頭文件
#include<sys/type.h> #include<sys/stat.h>函數(shù)原型
int
chmod(constchar*pathname,mode_tmode);
int
fchmod(int
fd,mode_tmode);功能 設(shè)置文件的權(quán)限。參數(shù)
pathname:文件的路徑名。
fd:文件描述符。
mode:權(quán)限。返回值 成功,返回0,失敗,返回-1。實例分析#include<stdlib.h>int
main(int
argc,char*argv[]){ if(argc!=3){
fprintf(stderr,"Usage:%sfilebane
mode(octal)\n",argv[0]); exit(1); }
mode_tmode=strtol(argv[2],NULL,8); chmod(argv[1],mode); exit(0);}改變文件的歸屬頭文件
#include<unistd.h>函數(shù)原型
int
chown(constchar*pathname,uid_towner,gid_tgroup);
int
fchown(int
fd,uid_towner,gid_tgroup);
int
lchown(constchar*pathname,uid_towner,gid_tgroup);功能 設(shè)置文件的歸屬。參數(shù)
path:文件的路徑名。
owner:新屬主ID。
group:新屬組ID。返回值 成功,返回0,失敗,返回-1。設(shè)置文件行為屬性頭文件
#include<unistd.h> #include<fcntl.h>函數(shù)原型
int
fcntl(int
fd,int
cmd,longarg)功能 設(shè)置文件的行為屬性。參數(shù)
fd:文件描述符。
cmd:操作命令。
arg:傳遞的參數(shù)。返回值 成功,返回值依賴于具體的操作,失敗,返回-1。設(shè)置文件行為屬性(續(xù))fcntl函數(shù)中參數(shù)cmd的定義參數(shù)cmd
含義F_GETFL/F_SETFL獲取/設(shè)置文件狀態(tài)F_GETLK/F_SETLK/F_SETLKW獲得/設(shè)置文件鎖F_DUPFD復(fù)制尚未使用的最小文件描述符F_GETOWN_EX/,F_SETOWN_EX獲取/設(shè)置I/O信號接收的目標F_GETSIG/F_SETSIG獲取/設(shè)置異步I/O信號6.4目錄操作目錄概述
目錄屬于一種特殊的文件,目的是為了有效組織和管理文件系統(tǒng),將文件系統(tǒng)構(gòu)建成一棵基于層次關(guān)系的目錄樹。目錄由若干目錄項組成,目錄項中記錄文件的名稱及其對應(yīng)的i節(jié)點編號,建立起文件名和i節(jié)點的映射關(guān)系。由于目錄文件內(nèi)容的布局與文件系統(tǒng)有關(guān),因此,無法象普通文件一樣通過read函數(shù)讀取,為此,Linux內(nèi)核提供了getdents系統(tǒng)調(diào)用,為了簡化操作,glibc提供了相應(yīng)的庫函數(shù)。創(chuàng)建/刪除目錄mkdir/rmdir函數(shù)頭文件
#include<sys/types.h> #include<stat.h>函數(shù)原型
int
mkdir(constchar*pathname,mode_tmode);
int
rmdir(constchar*pathname);功能 創(chuàng)建/刪除目錄。參數(shù)
pathname:目錄的路徑名。
mode:新建目錄權(quán)限。返回值 成功,返回0,失敗,返回-1。根目錄和工作目錄1.chroot函數(shù)頭文件
#include<unistd.h>函數(shù)原型
int
chroot(constchar*path);功能 改變進程的根目錄。參數(shù)
path:路徑名。返回值 成功,返回0,失敗,返回-1。根目錄和工作目錄
2.chdir函數(shù)頭文件
#include<unistd.h>函數(shù)原型
int
chdir(constchar*path);
int
fchdir(int
fd);功能 設(shè)置進程的工作目錄。參數(shù)
path:路徑名。
fd:文件描述符。返回值 成功,返回0,失敗,返回-1。瀏覽目錄1.opendir函數(shù)頭文件
#include<sys/types.h> #include<dirent.h>函數(shù)原型
DIR*opendir(constchar*pathname); DIR*fdopendir(int
fd);功能 打開目錄。參數(shù)
pathname:目錄路徑名。
fd:文件描述符。返回值 成功返回目錄流,失敗,返回NULL。瀏覽目錄頭文件
#include<sys/types.h> #include<dirent.h>函數(shù)原型
struct
dirent*readdir(DIR*dirp);功能 讀目錄。參數(shù)
dirp:打開的目錄流。返回值 成功,返回下一個目錄項,失敗,返回NULL。struct
dirent
{longd_ino; //i節(jié)點號
chard_name[256]; //文件名
off_t
d_off; //在目錄流中的偏移量
unsignedshortd_reclen; //文件名長度}瀏覽目錄3.closedir函數(shù)頭文件
#include<sys/types.h> #include<dirent.h>函數(shù)原型
int
closedir(DIR*dirp);功能 關(guān)閉打開的目錄。參數(shù)
dirp:打開的目錄流。返回值 成功,返回0,失敗,返回-1。實例分析int
main(int
argc,char*argv[]){DIR*dirp;
struct
dirent*direntp;if((dirp=opendir(argv[1]))==NULL){
fprintf(stderr,"errormessage:%s\n",strerror(errno));exit(1);}while((direntp=readdir(dirp))!=NULL)
printf("%s\n",direntp->d_name);closedir(dirp);exit(0);}6.5文件系統(tǒng)操作文件系統(tǒng)概述
為了使用文件系統(tǒng),Linux內(nèi)核向用戶層提供了相應(yīng)的接口,在使用文件系統(tǒng)前,首先需通過mount函數(shù)將文件系統(tǒng)掛載至某個特定目錄,當文件系統(tǒng)不再使用時,可通過umount函數(shù)將其從掛載點卸載,期間,可通過statvfs函數(shù),獲取文件系統(tǒng)的當前狀態(tài);必要時,可通過syncfs函數(shù)將整個文件系統(tǒng)同步至存儲設(shè)備。掛載/卸載文件系統(tǒng)頭文件
#include<sys/mount.h>函數(shù)原型
int
mount(constchar*source,constchar*target,char*type,unsignedlongflags,void*data);
int
umount(constchar*target);功能 掛載一個文件系統(tǒng)至目標目錄。參數(shù)
source:源塊設(shè)備文件。
target:掛載點目錄。
type:文件系統(tǒng)類型。
flags:操作行為。
data:傳遞數(shù)據(jù)。返回值 陳宮,返回0,失敗,返回-1。獲取文件系統(tǒng)信息statvfs函數(shù)頭文件
#include<sys/statvfs.h>函數(shù)原型
int
statvfs(constchar*path,struct
statvfs*buf);
int
fstatvfs(int
fd,struct
statvfs*buf);功能 獲取文件系統(tǒng)的統(tǒng)計信息。參數(shù)
path:文件的路徑名。
fd:文件描述符。
buf:指向存放文件系統(tǒng)統(tǒng)計信息的地址。返回值 成功,返回0,失敗,返回-1。獲取文件系統(tǒng)信息struct
statvfs{unsignedlongf_bsize;//邏輯塊大小
unsignedlongf_frsize;//碎片大小
fsblkcnt_t
f_blocks;//碎片占用的邏輯塊數(shù)
fsblkcnt_t
f_bfree;//空閑塊數(shù)量
fsblkcnt_t
f_bavail;//用戶可用的邏輯塊數(shù)
fsfilcnt_t
f_files;//總i-節(jié)點數(shù)量
fsfilcnt_t
f_ffree;//空閑i-節(jié)點數(shù)
fsfilcnt_t
f_favail;//用戶可用的i-節(jié)點數(shù)
unsignedlongf_fsid;//文件系統(tǒng)IDunsignedlongf_flag;//mount標識
unsignedlongf_namemax;
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋建筑合同模板示例
- 貨物運輸預(yù)約保險協(xié)議2024年
- 二手購車合同范本2024年
- 小學(xué)代課教師合同范例大全
- 跨國教育合作發(fā)展計劃
- 技術(shù)外包合同范本2024年
- 北京裝飾裝修工程施工合同
- 就業(yè)協(xié)議書簽訂過程中的注意事項
- 2024年南坊公務(wù)員樓房買賣合同
- 品牌商與甲方合作契約范本
- 24春國家開放大學(xué)《教育研究方法#》作業(yè)1-4參考答案
- 機場地勤的職業(yè)規(guī)劃
- 大學(xué)物理-5省公開課金獎全國賽課一等獎微課獲獎?wù)n件
- zpl語言指令解析
- 房屋維修實施方案
- 高校意識形態(tài)安全教育
- 2024年大學(xué)試題(法學(xué))-物證技術(shù)學(xué)筆試歷年真題薈萃含答案
- T-SHNA 0005-2023 成人住院患者腸外營養(yǎng)輸注護理
- 品牌管理 課件 第2章 品牌定位
- 人教版部編五年級道法期中試題及答案
- 電梯應(yīng)急救援演練記錄
評論
0/150
提交評論