《嵌入式Linux高级编程--02posix_目录操作.ppt》由会员分享,可在线阅读,更多相关《嵌入式Linux高级编程--02posix_目录操作.ppt(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式嵌入式Linux高级编程高级编程Linux目录与文件王莉目录操作打开目录:opendir DIR*opendir(const char*name);读取目录:readdirstruct dirent*readdir(DIR*dir);关闭目录:closedirint closedir(DIR*dir);打开目录#include#include DIR*opendir(const char*name);功能:opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流。返回值:成功返回目录流,失败返回NULL读取目录#include#include struct diren
2、t*readdir(DIR*dir);功能:readdir()返回参数dir目录流的下个目录的进入点。返回值:成功返回结构体指针,错误返回NULL。结构说明:struct dirent ino_t d_ino;/*inode number*/off_t d_off;/*offset to the next dirent*/unsigned short d_reclen;/*length of this record*/unsigned char d_type;/*type of file*/char d_name256;/*filename*/;关闭目录#include#include int
3、 closedir(DIR*dir);功能:closedir()关闭dir所指的目录流。返回值:成功返回0,失败返回-1,错误原因存在errno中。#include#include#include#include int main(void)DIR*dir;struct dirent*dp;int count;if(dir=opendir(“/root)=NULL)perror(opendir);exit(1);count=0;while(dp=readdir(dir)!=NULL)/每次读取当前目录下的一个文件 printf(%sn,dp-d_name);count+;closedir(di
4、r);return 0;作业把/root目录生成一个文件,文件内容就是该目录下的所有文件及目录名 文件属性#include#include#include int stat(const char*path,struct stat*buf);功能:查看文件或目录属性返回值:成功返回0,错误返回-1stat()函数用来将参数path所指的文件状态复制到参数buf所指的结构中.struct stat dev_t st_dev;/*ID of device containing file*/ino_t st_ino;/*inode number*/mode_t st_mode;/*protection
5、*/nlink_t st_nlink;/*number of hard links*/uid_t st_uid;/*user ID of owner*/gid_t st_gid;/*group ID of owner*/dev_t st_rdev;/*device ID(if special file)*/off_t st_size;/*total size,in bytes*/blksize_t st_blksize;/*blocksize for filesystem I/O*/blkcnt_t st_blocks;/*number of blocks allocated*/time_t
6、st_atime;/*time of last access*/time_t st_mtime;/*time of last modification*/time_t st_ctime;/*time of last status change*/;int fstat(int filedes,struct stat*buf);int lstat(const char*pathname,struct stat *buf);stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,
7、lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。文件类型 宏文件类型S _ I S R E G()普通文件S _ I S D I R()目录文件S _ I S C H R()字符特殊文件S _ I S B L K()块特殊文件S _ I S F I F O()管道或F I F OS _ I S L N K()符号连接(P O S I X.1或S V R 4无此类型)S _ I S S O C K()套接字(P O S I X.1或S V R 4无此类型)#include#include#include int main(int argc,char*argv)int i;
8、struct stat buf;/文件属性及状态变量 char *msg;for(i=1;iargc;i+)printf(%s:,argvi);if(lstat(argvi,&buf)0)/将参数当做文件或目录查看其属性状态,结果保存在buf变量中 printf(*lstat error.n);continue;if(S_ISREG(buf.st_mode)/如果是一个普通文件则.msg=regular;else if(S_ISDIR(buf.st_mode)/如果是一个目录文件则。msg=directory;else if(S_ISCHR(buf.st_mode)msg=character
9、special;else if(S_ISBLK(buf.st_mode)msg=block special;else if(S_ISFIFO(buf.st_mode)msg=fifo;else if(S_ISLNK(buf.st_mode)msg=symbolic link;else if(S_ISSOCK(buf.st_mode)msg=socket;else msg=*unknown mode;printf(%sn,msg);exit(0);练习1.将/dev/目录下所有字符设备文件名保存到chafile.txt文件中2.将/etc/目录下所有是目录的目录名保存到dirfile.txt其他
10、函数:#include#include int chmod(const char*path,mode_t mode);功能:chmod函数可以更改现存文件的存取许可权。返回值:成功返回0,错误返回-1。#include#include int chown(const char*path,uid_t owner,gid_t group);功能:chown函数可用于更改文件的用户ID和组ID。返回值:成功返回0,错误返回-1。权限部分的实现S _ I S U I D 执行时设置-用户-I DS _ I S G I D 执行时设置-组-I DS _ I S V T X 保存正文S _ I R W X
11、 U 用户(所有者)读、写和执行S _ I R U S R 用户(所有者)读S _ I W U S R 用户(所有者)写S _ I X U S R 用户(所有者)执行S _ I R W X G 组读、写和执行S _ I R G R P 组读S _ I W G R P 组写S _ I X G R P 组执行S _ I R W X O 其他读、写和执行S _ I R O T H 其他读S _ I W O T H 其他写S _ I X O T H 其他执行练习:ls命令的简单实现(注意与实际的ls命令的区别!)实验:每隔1分钟检查当前目录中文件大小超过1M的文件,并显示提示信息!system(“”)st_size 1m=1024k 1k=1024bytes 1024*1024dd if=/dev/zero of=/tmp/temfile bs=100k count=10