您的位置:首页 > 运维架构 > Linux

Linux C 文件操作相关整理

2017-05-11 15:50 295 查看
1、检查文件是否存在

access:按照实际用户ID和实际组进行访问权限测试

#include <unistd.h>
int access(const char* pathname, int mode);

pathname:文件路径
mode:

F_OK:测试文件是否存在
R_OK:测试读权限
W_OK:测试写权限
X_OK:测试执行权限
返回:0表示不存在

2、检查目录是否存在

opendir:打开文件目录,成功返回指针,否则返回NULL

if (opendir(dir_path) == NULL)
printf("dir not exist!\n");
else
printf("dir exist!\n");3、stat系列函数
头文件:#include <sys/stat.h> #include <unistd.h>

函数定义: int stat(const char* file_name, struct stat* buf);

函数说明:通过文件名file_name获取文件信息,并保存在buf指向的结构体stat中

返回值:成功返回0,失败返回-1,错误代码保存在errno

错误代码:

ENOENT:参数file_name指定的文件不存在
ENOTDIR:目录存在但并非真正的目录(那是什么目录?)
ELOOP:file_name有过多符号连接问题,上限为16个
EFAULT:参数buf为无效指针,指向无法存在的内存空间
EACCESS:存取文件时被拒绝
ENOMEM:核心内存不足
ENAMETOOLONG:参数file_name的路径名称太长
struct stat {
mode_t st_mode; // file type & mode(permissions)
ino_t st_ino; // i-node number(serial number)
dev_t st_dev; // device number(filesystem)
dev_t st_rdev; // device number for specials files
nlink_t st_nlink; // number of links
uid_t st_uid; // user ID of owner
gid_t st_gid; // group ID of owner
off_t st_size; // size in bytes, for regular files
time_t st_atime; // time of last access
time_t st_mtime; // time of last modification
time_t st_ctime; // time of last file status change
long st_blksize; // best I/O block size
long st_blocks; // number of 512-byte blocks allocated
};st_mode:
S_IFMT 0170000 文件类型的位遮罩
S_IFSOCK 0140000 scoket
S_IFLNK 0120000 符号连接
S_IFREG 0100000 一般文件
S_IFBLK 0060000 区块装置
S_IFDIR 0040000 目录
S_IFCHR 0020000 字符装置
S_IFIFO 0010000 先进先出

S_ISUID 04000 文件的(set user-id on execution)位
S_ISGID 02000 文件的(set group-id on execution)位
S_ISVTX 01000 文件的sticky位

S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限

S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限

S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限

参考: http://blog.csdn.net/tigerjibo/article/details/11695763# http://www.cnblogs.com/Anker/p/3349672.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: