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);


 。