Linux - 文件属性及目录相关系统调用

stat()/fstat()/lstat()系统调用

功能
获取文件状态
头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
函数原型
int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);
与stat()差别:为符号连接时,lstat()返回连接自身状态
返回值
成功时返回0
否则-1

struct stat结构定义

struct stat {
    mode_t st_mode;  /*file type & mode*/
    ino_t     st_ino;     /*inode number (serial number)*/
    dev_t    st_rdev;   /*device number (file system)*/
    nlink_t   st_nlink;  /*link count*/
    uid_t     st_uid;     /*user ID of owner*/
    gid_t     st_gid;     /*group ID of owner*/
    off_t     st_size;    /*size of file, in bytes*/
    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;     /*Optimal block size for I/O*/
    long      st_blocks;      /*number 512-byte blocks allocated*/
};

access()系统调用

功能
按实际用户ID和实际组ID测试文件存取权限
头文件
#include <unistd.h>
函数原型
int access(const char *pathname, int mode);
返回值
成功时返回0
否则-1
mode参数说明
R_OK
W_OK
X_OK
F_OK

umask()系统调用

功能
为进程设置文件存取权限屏蔽字,并返回以前的值
头文件
#include <sys/types.h>
#include <sys/stat.h>
函数原型
mode_t umask(mode_t mask);

chmod()/fchmod()系统调用

功能
更改文件权限
头文件
#include <sys/types.h>
#include <sys/stat.h>
函数原型
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);
返回值
成功时返回0
失败返回-1

chown()/fchown()/lchown()系统调用

功能
变更文件宿主
头文件
#include <sys/types.h>
#include <unistd.h>
函数原型
int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
若path为符号连接, lchown()改变连接本身的所有者或组,chown()则改变连接所指向文件的所有者或组
返回值
成功时返回0
失败返回-1

link()/unlink()系统调用

功能
创建/删除一个硬链接
头文件
#include <unistd.h>
函数原型
int link(const char *oldpath, const char *newpath);
int unlink(const char *pathname);
删除一个文件的目录项并减少它的链接数
返回值
成功时返回0
失败返回-1

symlink()/readlink()系统调用

功能
创建/删除一个符号链接
头文件
#include <unistd.h>
函数原型
int symlink(const char *oldpath, const char *newpath);
返回值
成功时返回0
否则-1
int readlink(const char *path, char *buf, size_t bufsiz);
返回值
成功时返回放置在buffer中的字符数
否则-1

目录处理相关系统调用

创建/删除目录
mkdir()/rmdir()
更改/获取目录
chdir()/fchdir(), getcwd()
读取目录信息
opendir()/closedir()
readdir()
telldir()
seekdir()

mkdir()/rmdir()系统调用

功能
创建/删除一个空目录
头文件
#include <sys/stat.h>
#include <sys/types.h>
函数原型
int mkdir(const char *pathname, mode_t mode);
int rmdir(const char *pathname);
返回值
成功时返回0
失败时返回-1

chdir()/fchdir()系统调用

功能
更改工作目录
头文件
#include <unistd.h>
函数原型
int chdir(const char *path);
int fchdir(int fd);
返回值
成功时返回0
失败时返回-1
说明
当前工作目录是进程的属性,所以该函数只影响调用chdir的进程本身

getcwd()系统调用

功能
获得当前工作目录的绝对路径
头文件
#include <unistd.h>
函数原型
char *getcwd(char *buf, size_t size);
返回值
成功时返回buf
出错则为NULL

读取目录信息

数据结构
DIR, struct dirent
基本操作
opendir()/closedir()
readdir()
telldir()
seekdir()
DIR
目录流对象
头文件
 <dirent.h>
定义形式
typedef struct _dirstream DIR;
struct dirent
目录项
头文件
<dirent.h>
定义
ino_t d_ino;       /* inode号*/
char  d_name[NAME_MAX + 1];    /* 文件名*/

目录基本操作

功能
打开、关闭、读、定位
头文件
#include <sys/types.h>
#include <dirent.h>
函数原型
DIR *opendir(const char *name);
int closedir(DIR *dir);
struct dirent *readdir(DIR *dir);
off_t telldir(DIR *dir); //获取目录流读取位置
void seekdir(DIR *dir, off_t offset);

fopen()函数

功能
打开文件流
头文件
#include <stdio.h>
函数原型
FILE *fopen(const char *filename, const char *mode);
mode参数说明
“r”:  以读方式打开文本文件
“w”: 以写方式创建一个文件,覆盖老文件
“a”: 以追加方式打开文件
“r+”:  以读写方式打开一个现存文件
“w+”:以读写方式打开一个文件
若不存在,将创建之
若存在,将覆盖原文件
“a+”: 以读及追加方式打开文件,若不存在,将创建之
“b”:以二进制模式打开文件
“t”:以文本模式打开文件
时间: 2024-10-11 11:13:24

Linux - 文件属性及目录相关系统调用的相关文章

5.Linux文件和目录相关操作

一.目录管理:        cd, pwd, ls  都是来查看目录的 mkdir: make directory  创建目录            -p: 当指定的目标目录的父目录不存在时,则先创建之            -p, --parents              no error if existing, make parent directories as needed      -v, --verbose              print a message for e

第七章 Linux文件和目录相关的知识 作业题

1. rmdir -p  用来删除一串目录,比如 rmdir  -p /tmp/test/1/2/3  如果 /tmp/1/2/ 下面除了3目录外还有个4目录,4目录里还有个5目录,那么是否可以成功删除?   rmdir -p  删除一个不存在的目录时是否报错呢?rmdir -p 不能成功删除非空目录,rmdir -p 删除一个不存在的目录时会报错,提示"没有那个文件或目录" 2. 删除一个目录或者文件时,在删除之前会先问一下我们是否删除,如果直接回车,是否删除呢?如果输入的不是'y'

linux分区和目录相关知识

Filesystem:一个软件,内核中实现 Windows:ntfs,FAT32 Linux:VFS(Virtual File System) /:根目录 /bin,/sbin:二进制程序,操作系统自身运行就需要用到的程序 /usr/bin,/usr/sbin:二进制程序,基于的系统工具 /usr/local/bin,/usr/local/sbin:第三方程序 /lib:库文件 /usr/lib /usr/local/lib /etc:配置文件 /tmp:临时文件夹 /var log mail

【Linxu学习002】Linux常用命令/目录相关

一.Linux目录 在/目录下有若干个文件夹,初始的时候比较头疼不知道干什么用的,有一本书专门介绍各个目录的作用,该书已经上传到附件.

Linux日记Day3---Linux的文件属性与目录配置

Linux最优秀的地方之一,就在于它的多用户.多任务环境.为了让用户具有较安全的管理机制,文件的权限管理是很重要的.Linux通常将文件的访问方式分为分为三个类别,分别是owner/group/other,而且具有read/write/excute等权限.在Linux下面这么多的目录/文件,到底代表什么意义呢?下面我们就来一一介绍. 一.用户与用户组 1. 文件拥有者(用户) 由于Linux是多用户.多任务的系统,可能常常会多人同时使用主机工作,考虑到每个人的隐私权以及每个人喜好的工作环境,“文

CentOS(九)--与Linux文件和目录管理相关的一些重要命令①

   接上一篇文章,实际生产过程中的目录管理一定要注意用户是root 还是其他用户. 一.目录与路径 1.相对路径与绝对路径 因为我们在Linux系统中,常常要涉及到目录的切换,所以我们必须要了解 "路径" 以及 "相对路径" 与 "绝对路径" 的概念. 在之前的学习中,就反复的强调了Linux的目录是 "树状目录" .假设我们需要在任意一个目录下切换到另一个目录下,通常是使用的是 cd 这个命令,此时在写切换的目录名时就有两

CentOS(十)--与Linux文件和目录管理相关的一些重要命令②

在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Linux文件和目录管理相关的一些重要命令,包括 目录与路径相关的命令(cd.pwd.mkdir.rmdir等).管理文件与目录的命令(ls.cp.rm.mv等).查看文件内容命令(cat.more.less等),在这一篇随笔中,将继续详细记录与Linux文件和目录管理相关的其他一些重要命令. 一.修改文

Linux——date命令,目录相关的命令

一.日期命令 1.date命令 命令格式: date [OPTION]... [+FORMAT] # 显示当前系统时间: 显示时间格式(date '+%y,%m,%d,%H,%M,%S'): format格式 含义 %Y,%y 年 %m 月 %d 日 %H 时 %M 分 %S 秒 %u 周几 date [MMDDhhmm[[CC]YY][.ss]]  # 设置系统时间 MM: 月分 DD:几号 hh: 小时 mm: 分钟 YY: 两位年份 CCYY: 四位年份 .ss: 秒钟 Linux的两种时

linux入门教程(六) Linux文件与目录管理

在linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 这就是一个文件的路径.如果你告诉系统这个文件的路径,那么系统就可以找到这个文件.在linux的世界中,存在着绝对路径和相对路径. 绝对路径:路径的写法一定由根目录”/”写起,例如/usr/local/mysql 这就是绝对路径. 相对路径:路径的写法不是由根目录”/”写起,例如,首先用户进入到/ 然后再进入到home ,命令为 cd /home 然后 cd