10-11
来源:互联网 发布:电吉他入门 知乎 编辑:程序博客网 时间:2024/05/21 17:14
文件的访问权限说明:
相关的ID:实际用户ID实际组id,有效用户id,有效组id,附加组id,保存的设置用户id,保存的设置组id
实际用户id和实际组id:用于表示当前LInux的登录用户,在会话中并不会改变,只有在使用sudo等命令时会暂时发生改变。
有效用户id,有效组id,附加组id:用于确定每个文件的访问组权限,保存在stat结构体中的st_mode分量中。
S_IRUSR:用户读
S_IWUSR:用户写
S_IXUSR:用户执行
S_IRGRP:组读
S_IWGRP:组写
S_IXGRP:组执行
S_IROTH:其他用户读
S_IWOTH:其他用户写
S_IXOTH:其他用户执行
保存的设置组id和保存的设置用户id:保存了该用户的有效组id和有效用户id的一个副本
测试文件访问权限函数:
#include <unistd.h>
int access(const char *pathname, int mode);
umask函数:
mode_t umask(mode_t cmode);
chmod函数和fchmod函数:
umask函数只能在创建文件的时候给定文件的权限,而chmod和fchmod函数可以修改已经存在的文件的权限。chmod可以在任何时候修改指定文件的权限,而fchmod需要在文件被打开后使用文件描述符来修改。
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *filename, mode_t mode);
int fchmod(int fd, mode_t mode);
修改文件的用户ID和用户组ID:chown,fchown,lchown
rename函数:
#include <stdio.h>
int rename(const char *oldname, const char *newname);
文件的其他高级操作函数:
1. #include <unistd.h>
int dup(int fd);
int dup2(int fd, int fd2);
2. #include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, int arg);
第二个参数:
F_DUPD:返回大于或等于arg的最低序号的文件描述符。该功能可以由dup函数实现。新的文件描述符与旧的可以互换使用。调用成功时,返回值为新的文件描述符。
F_GETFD:获得close-on-exec标志。如果最后一位是0,则该标志没有设置。返回值为0或1.
F_SETFD:设置close-on-exec标志为指定的值arg(只有最后一位有效,为0或1)
F_GETFL:获得文件的打开方式。返回所有的标志位,标志位的含义与open函数中相同。
F_SETFL:设置文件打开的方式的标志。设置文件打开方式为arg指定的打开方式。仅能设置O_APPEND和O_NONBLOCK或O_NDELAY,有的系统还可以设置O_SYNC,该标志被所有的文件描述符所共享。
F_GETLK:获得本进程得到锁的第一个锁的flock结构。
F_SETLK:获得离散的文件锁,不等待。
F_SETLKW:获得离散的文件锁,必要时等待。
F_GETOWN:返回当前接受SIGIO或SIGURG信号(signal)的进程ID或进程组。进程ID以负值返回。
F_SETOWN:设置进程或进程组接受SIGIO和SIGURG信号,进程组ID以负值返回。进程ID以正值指定。
文件锁:在文已经共享的情况下如何操作,也就是当多个进程同时操作同一个文件时,我们怎么保证文件数据的正确性。linux通常采用的方法是文件上锁,来避免共享资源的产生竞争状态。
文件锁包括建议性锁和强制性的锁。建议性的,顾名思义,相对温柔一些,在对文件进行锁操作时,会检测是否已经有锁存在,并且尊重已有的锁。在一般的情况下,内核和系统都不使用建议锁。强制性的锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他进程对其进行读写操作。采取强制性的锁对性能的影响很大,每次进行读写操作都必须检查是否有锁存在。
fcntl函数返回文件状态标志:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:读写
O_APPEND:每次写时追加
O_NONBLOCK:非阻塞模式
O_SYNC:等待数据和属性写完成
O_DSYNC:等待数据写完成
O_RSYNC:同步读写
O_FSYNC:等待写完成
O_ASYNC:异步I/O操作
truncate和ftruncate函数:
#include <unistd.h>
int truncate(char *filepath, size_t len);
int ftruncate(int fd, size_t len);
remove函数:
#include <stdio.h>
int remove(const char *pathname);
目录文件操作:
mkdir和rmdir
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int mkdir(const char *pathname, mode_t mode);//创建一个目录
int rmdir(const char *pathname);//删除一个目录
int chdir(const char *pathname);//改变工作路径
int fchdir(int fd);//改变文件工作路径
char *getcwd(char *buf, size_t size);//获取文件的完整路径
#include <dirent.h>
DIR *opendir(const char *pathname);//打开目录,返回的是一个DIR指针,是一个内部结构,用来保存被度的目录的有关信息。
int close(DIR *dp);//关闭目录,参数是一个内部结构指针
struct dirent *readdir(DIR *dp);//读目录,返回一个目录dirent结构体指针。
struct dirent
{
ino_t d_ino;//i-node number
char d_name[NAME_MAX+1];//null-terminated filename
};
相关的ID:实际用户ID实际组id,有效用户id,有效组id,附加组id,保存的设置用户id,保存的设置组id
实际用户id和实际组id:用于表示当前LInux的登录用户,在会话中并不会改变,只有在使用sudo等命令时会暂时发生改变。
有效用户id,有效组id,附加组id:用于确定每个文件的访问组权限,保存在stat结构体中的st_mode分量中。
S_IRUSR:用户读
S_IWUSR:用户写
S_IXUSR:用户执行
S_IRGRP:组读
S_IWGRP:组写
S_IXGRP:组执行
S_IROTH:其他用户读
S_IWOTH:其他用户写
S_IXOTH:其他用户执行
保存的设置组id和保存的设置用户id:保存了该用户的有效组id和有效用户id的一个副本
测试文件访问权限函数:
#include <unistd.h>
int access(const char *pathname, int mode);
umask函数:
mode_t umask(mode_t cmode);
chmod函数和fchmod函数:
umask函数只能在创建文件的时候给定文件的权限,而chmod和fchmod函数可以修改已经存在的文件的权限。chmod可以在任何时候修改指定文件的权限,而fchmod需要在文件被打开后使用文件描述符来修改。
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *filename, mode_t mode);
int fchmod(int fd, mode_t mode);
修改文件的用户ID和用户组ID:chown,fchown,lchown
rename函数:
#include <stdio.h>
int rename(const char *oldname, const char *newname);
文件的其他高级操作函数:
1. #include <unistd.h>
int dup(int fd);
int dup2(int fd, int fd2);
2. #include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, int arg);
第二个参数:
F_DUPD:返回大于或等于arg的最低序号的文件描述符。该功能可以由dup函数实现。新的文件描述符与旧的可以互换使用。调用成功时,返回值为新的文件描述符。
F_GETFD:获得close-on-exec标志。如果最后一位是0,则该标志没有设置。返回值为0或1.
F_SETFD:设置close-on-exec标志为指定的值arg(只有最后一位有效,为0或1)
F_GETFL:获得文件的打开方式。返回所有的标志位,标志位的含义与open函数中相同。
F_SETFL:设置文件打开的方式的标志。设置文件打开方式为arg指定的打开方式。仅能设置O_APPEND和O_NONBLOCK或O_NDELAY,有的系统还可以设置O_SYNC,该标志被所有的文件描述符所共享。
F_GETLK:获得本进程得到锁的第一个锁的flock结构。
F_SETLK:获得离散的文件锁,不等待。
F_SETLKW:获得离散的文件锁,必要时等待。
F_GETOWN:返回当前接受SIGIO或SIGURG信号(signal)的进程ID或进程组。进程ID以负值返回。
F_SETOWN:设置进程或进程组接受SIGIO和SIGURG信号,进程组ID以负值返回。进程ID以正值指定。
文件锁:在文已经共享的情况下如何操作,也就是当多个进程同时操作同一个文件时,我们怎么保证文件数据的正确性。linux通常采用的方法是文件上锁,来避免共享资源的产生竞争状态。
文件锁包括建议性锁和强制性的锁。建议性的,顾名思义,相对温柔一些,在对文件进行锁操作时,会检测是否已经有锁存在,并且尊重已有的锁。在一般的情况下,内核和系统都不使用建议锁。强制性的锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他进程对其进行读写操作。采取强制性的锁对性能的影响很大,每次进行读写操作都必须检查是否有锁存在。
fcntl函数返回文件状态标志:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:读写
O_APPEND:每次写时追加
O_NONBLOCK:非阻塞模式
O_SYNC:等待数据和属性写完成
O_DSYNC:等待数据写完成
O_RSYNC:同步读写
O_FSYNC:等待写完成
O_ASYNC:异步I/O操作
truncate和ftruncate函数:
#include <unistd.h>
int truncate(char *filepath, size_t len);
int ftruncate(int fd, size_t len);
remove函数:
#include <stdio.h>
int remove(const char *pathname);
目录文件操作:
mkdir和rmdir
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int mkdir(const char *pathname, mode_t mode);//创建一个目录
int rmdir(const char *pathname);//删除一个目录
int chdir(const char *pathname);//改变工作路径
int fchdir(int fd);//改变文件工作路径
char *getcwd(char *buf, size_t size);//获取文件的完整路径
#include <dirent.h>
DIR *opendir(const char *pathname);//打开目录,返回的是一个DIR指针,是一个内部结构,用来保存被度的目录的有关信息。
int close(DIR *dp);//关闭目录,参数是一个内部结构指针
struct dirent *readdir(DIR *dp);//读目录,返回一个目录dirent结构体指针。
struct dirent
{
ino_t d_ino;//i-node number
char d_name[NAME_MAX+1];//null-terminated filename
};
0 0
- 11/10
- 10-11
- 10/11
- 10/11
- 10 11 11 心态
- 10 10 11 平静
- 10 11 10 反复
- 11-10-10
- idea!2004-10-11
- 2004/11/10數據庫
- 2005/11/10
- 05/11/10
- 2006-10-11 行尸走肉
- [MYSQL]觸發器應用11/10
- 10-11周小结
- 2006-10-11 星期三
- 2006-11-10 星期五
- 2008-10-11
- New IO JAVA1.4特性
- Leetcode 113 Path Sum II
- php图片压缩
- js正则表达式语法
- 使用FormData对象提交表单
- 10-11
- 必须知道!什么是 Copyleft ?
- 再看网路层分组的转发
- UE4 性能优化方法(转载)
- 视频分辨率、码率、帧率、采样率
- Java主线程等待子线程、线程池
- 10-12
- Property Graph简介
- 数据库联合查找的sql语句