Linux System Programming note 8 ——File and Directory Management
来源:互联网 发布:网络成瘾怎么办 编辑:程序博客网 时间:2024/06/09 07:02
1. The Stat Family
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);
struct stat{
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
blksize_t st_blksize;
blkcnt_t st_blocks;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
2. Permissions
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);
3. Ownership
#include <sys/types.h>
#include <unistd.h>
int chown(const char *path, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
4. Extended attribute namespaces
system
security
trusted
user
5. Retrieving an extended attribute
#include <sys/types.h>
#inlcude <attr/xattr.h>
ssize_t getxattr(const char *path, const char *key, void *value, size_t size);
ssize_t lgetxattr(const char *path, const char *key, void *value, size_t size);
ssize_t fgetxattr(int fd, const char *key, void *value, size_t size);
6. Setting an extended attribute
#include <sys/types.h>
#include <attr/xattr.h>
int setxattr(const char *path, const char *key, const void *value, size_t size, int flags);
int lsetxattr(const char *path, const char *key, const void *value, size_t size, int flags);
int fsetxattr(int fd, const char *key, const void *value, size_t size, int flags);
7. Listing the extended attributes on a file
#include <sys/types.h>
#include <attr/xattr.h>
ssize_t listxattr(const char *path, char *list, size_t size);
ssize_t llistxattr(const char *path, char *list, size_t size);
ssize_t flistxattr(int fd, char *list, size_t size);
8. Removing an extended attribute
#include <sys/types.h>
#include <attr/xattr.h>
int removexattr(const char *path, const char *key);
int lremovexattr(const char *path, chost char *key);
int fremovexattr(int fd, const char *key);
9. Obtaining the current working directory
#include <unistd.h>
char *getcwd(char *buf, size_t size);
#define _GNU_SOURCE
#include <unistd.h>
char *get_current_dir_name(void);
#define _XOPEN_SOURCE_EXTENDED /* or _BSD_SOURCE */
#include <unistd.h>
char *getwd(char *buf);
10. Changing the current working directory
#include <unistd.h>
int chdir(const char *path);
int fchdir(int fd);
11. Creating Directories
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *path, mode_t mode);
12. Removing Directories
#include <unistd.h>
int rmdir (const char *path);
13. Reading a Directory's Contents
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(cosnt char *name);
To obtain the file descriptor behind a given directory stream:
#define _BSD_SOURCE /* or _SVID_SOURCE */
#include <sys/types.h>
#include <dirent.h>
int dirfd(DIR *dir);
14. Reading from a directory stream
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir(DIR *dir);
struct dirent{
ino_t d_ino;
off_t d_off;
unsigned short d_reclen;
unsigned char d_type;
char d_name[256];
};
15. Closing the directory stream
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dir);
16. System call for reading directory contents
#include <unistd.h>
#include <sys/types.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
#incllude <errno.h>
/*
* Not defined for user space: need to
* use the _syscall3() macro to access
*/
int readdir(unsigned int fd, struct dirent *dirp, unsigned int count);
int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);
You do not want to use these system calls! They are obtuse and not portable.
17. Hard Links
#include <unistd.h>
int link(const char *oldpath, const char *new path);
18. Symbolic Links
#include <unistd.h>
int symlink(const char *oldpath, const char *newpath);
19. Unlinking
#include <unistd.h>
int unlink(const char *pathname);
20. Moving
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
21. Monitoring File Events
21.1 Initializing inotify
#include <sys/inotify.h>
int inotify_init1(int flags);
The flags parameter is usually 0, but may be a bitwise OR of the following flags:
IN_CLOEXEC
IN_NONBLOCK
errno:
EMFILE
ENFILE
ENOMEN
example:
int fd;
fd = inotify_init1(0);
if (fd == -1){
perror("inotify_init1");
exit(EXIT_FAILURE);
}
21.2 Watches
#include <sys/inotify>
int inotify_add_watch(int fd, const char *path, uint32_t mask);
mask:
IN_ACCESS
IN_MODIFY
IN_ATTRIB
IN_CLOSE_WRITE
IN_CLOSE_NOWRITE
IN_OPEN
IN_MOVED_FROM
IN_MOVED_TO
IN_CREATE
IN_DELETE
IN_DELETE_SELF
IN_MOVE_SELF
The following events are also definedm grouping two or more events into a single value:
IN_ALL_EVENTS
IN_CLOSE
IN_MOVE
21.3 inotify Events
#include <sys/inotify.h>
struct inotify_event{}
int wd;
uint32_t mask;
uint32_t cookie;
uint32_t len;
char name[];
};
21.4 Reading inotify events
21.5 Advanced inotify events
IN_IGNORED
IN_ISDIR
IN_Q_OVERFLOW
IN_UNMOUNT
21.6 Removing an inotify Watch
#include <inotify.h>
int inotify_rm_watch(int fd, uint32_t wd);
0 0
- Linux System Programming note 8 ——File and Directory Management
- Linux System Programming note 5—— Process Management
- Linux System Programming note 6—— Adcanced Process Management
- Linux System Programming note 9 ——Memory Management
- Linux System Programming note 2 ——File I/O
- Linux System Programming note 4 —— Advanced File I/O
- Linux System Programming note 7 —— Threading
- Linux System Programming note 10 —— Signal
- Linux System Programming note 11 ——Time
- Linux System Programming:Memory Management
- linux file System directory
- Linux System Programming note 1
- linux file and directory
- Linux System Management and Package Management
- Linux programming and system knowledge
- FAT file system-Note
- WMI009-WMI学习笔记(九)——System.Management and System.Management.Instrumentation Namespaces(命名空间)
- Linux kernel Process Management 3.1(overview)——Schedule System
- A Brief Look 官网摘录
- 防止弹窗移除界面
- W5100硬件设计和调试要点
- Java SE 学习笔记 第十二记
- 如何让eclipse自动格式化代码时不换行
- Linux System Programming note 8 ——File and Directory Management
- 网易云音乐(1)————它是音乐社区
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- C语言学习笔记(二)流程控制
- CubieBoard3 安装SSD记录笔记
- MemcachedClient.store 一直返回false?
- [Phonegap+Sencha Touch] 移动开发23 Android和IOS的webview 点击穿透/鬼点击(Ghost Click) 的缓解办法
- webkit浏览器开发之路(一)——环境搭建
- 网络效应VS平台效应,如何选择主要价值引擎?