发布时间:2014-09-05 17:09:04作者:知识屋
1.stat函数
stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。
view plaincopy to clipboardprint?
#include <sys/types.h>
#include <sys/stat.h>
int stat(const char *pathname, struct stat *buf) ;
int fstat(int filedes,struct stat *buf) ;
int lstat(const char *pathname, struct stat *buf) ;
三个函数的返回:若成功则为0,若出错则为-1
stat的数据结构如下所示
view plaincopy to clipboardprint?
struct stat {
mode_t st_mode; /* 文件类型和权限*/
ino_t st_ino; /* inode 号*/
nlink_t st_nlink; /* 链接数目*/
uid_t st_uid; /* 文件所有者的uid*/
gid_t st_gid; /* 文件所有者的组id */
off_t st_size; /* 文件大小*/
time_t st_atime; /* 最后访问时间*/
time_t st_mtime; /* 最后修改时间*/
time_t st_ctime; /* 最后文件状态修改时间*/
blksize_t st_blksize; /* 最佳读写I/O块大小*/
blkcnt_t st_blocks; /* 一共有多少个块*/
};
2.access函数
access按实际用户ID和实际组ID进行文件权限的测试。
view plaincopy to clipboardprint?
#include <unistd.h>
int access(const char *pathname, int mode) ;
返回:若成功则为0,若出错则为-1
参数解析:
mode值可以是以下几种:
R_OK 测试读许可权
W_OK 测试写许可权
X_OK 测试执行许可权
F_OK 测试文件是否存在
3.truncate函数
truncate 把某个文件截短到一定长度,跟open中的O_TRUNC类似。
view plaincopy to clipboardprint?
int truncate(const char *pathname, off_t length);
int ftruncate(int filedes, off_t length);
成功返回0 ,失败返回-1
4.与链接有关的函数
link函数用来创建一个硬链接文件
int link(const char *existingpath, const char *newpath);
symlink用来创建一个软链接文件
int symlink(const char *actualpath, const char *sympath);
unlink删除软链接时只删除链接文件本身,被连接的文件不受影响。删除硬链接时,如果inode引用数为0,则删除文件。如果有进程还在使用该文件,则可以继续使用。
int unlink(const char *pathname);
readlink只读取软连接本身
ssize_t readlink(const char* restrict pathname, char *restrict buf, size_t bufsize);
5.utime函数
utime读取文件的最后访问时间和修改实际那
view plaincopy to clipboardprint?
#include <utime.h>
int utime(const char *pathname, const struct utimbuf *times);
struct utimbuf {
time_t actime; /* 最后访问时间*/
time_t modtime; /* 最后修改时间*/
}
Inode属性的修改时间有内核来完成,应用程序没有权限去设置。
6.目录操作函数
opendir用来打开一个目录 的内容,并返回目录指证。
#include <dirent.h>
DIR *opendir(const char *pathname); 成功返回DIR指针,失败返回NULL
readdir 以一定次序读取目录内容,
struct dirent *readdir(DIR *dp);
struct dirent {
ino_t d_ino; /* i-node 号*/
char d_name[NAME_MAX + 1]; /*文件或目录名*/
}
rewinddir 重置目录的输入流,重置后从第一个目录项开始读。
void rewinddir(DIR *dp);
telldir 返回目录流的当前位置
long telldir(DIR *dp);
seekdir 设置目录流位置。
void seekdir(DIR *dp, long loc);
loc有telldir返回
closedir 关闭目录流
int closedir(DIR *dp);
下面的例子是递归遍历一个目录,打印出这个目录下所有的文件和目录,并且需要打印出这些文件的类型(比如 链接文件,普通文件等)。
view plaincopy to clipboardprint?
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
void iterate_dir( char *dir );
int main(int argc, char **argv)
{
if( argc != 2 ){
printf("usage: command dir/n");
return -1;
}
iterate_dir( argv[1] );
return 0;
}
void iterate_dir ( char * dir )
{
DIR *cur_dir;
struct dirent *dir_ent;
struct stat dir_stat;
char path[PATH_MAX];
cur_dir = opendir(dir);
if ( NULL == cur_dir ){
printf("open dir faild %s/n", strerror(errno));
return ;
}
while( NULL != ( dir_ent=readdir(cur_dir))){
if ( 0==strcmp(dir_ent->d_name,".") || 0==strcmp( dir_ent->d_name,"..")){
continue;
}
sprintf( path, "%s%s",dir,dir_ent->d_name);
if ( -1 == lstat(path, &dir_stat) ){
printf("lstat error %s /n",strerror(errno));
return ;
}
if ( S_ISDIR( dir_stat.st_mode) ){
strcat(path,"/");
printf("path: %s/n",path);
iterate_dir(path);
continue;
}
printf("file: %s /n", path);
}
}
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能