unix c编程:目录操作

access、truncate、link 、dir操作

access

int access(const char *filenpath, int mode);

作用: 判断是否对文件有操作权限
在头文件unistd.h中的预定义如下:

#define R_OK 4  只判断是否有读权限
#define W_OK 2  只判断是否有写权限
#define X_OK 1  判断是否有执行权限
#define F_OK 0  只判断是否存在

truncate

int truncate(const char *path,off_t length);
int ftruncate(int fd,off_t length);

作用:将常规文件截断成一个大小精为length字节的文件。(如果length大于源文件大小,则加\0填充)
注意:使用ftruncate(),这个文件必须被打开用以写操作,使用truncate函数的文件必须能够被写

link

int link (const char * oldpath,const char * newpath);   //执行成功时则返回0,失败时则返回-1
int symlink(const char*actualpath,const char *sympath); //执行成功时则返回0,失败时则返回-1

作用:创建链接。link创建硬链接,symlink创建符号链接
区别:
硬链接:
1、文件有相同的 inode 及 data block;
2、只能对已存在的文件进行创建;
3、不能交叉文件系统进行硬链接的创建;
4、不能对目录进行创建,只可对文件创建;
5、删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软链接:
1、软链接有自己的文件属性及权限等;
2、可对不存在的文件或目录创建软链接;
3、软链接可交叉文件系统;
4、软链接可对文件或目录创建;
5、创建软链接时,链接计数 i_nlink 不会增加;
6、删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

ssize_t readlink(const char *pathname, char *buffer, size_t bufsize);    //readlink()函数组合了open(),read()和close()的所有操作

dir操作——opendir,readdir,rewinddir,telldir,seekdir,closedir

#include<sys/types.h>
#include<dirent.h>
DIR* opendir (const char *path ); //打开目录
struct dirent* readdir(DIR* dir_handle); //读目录信息,每次读完自动前进一位
void rewinddir(DIR *dirp); //把目录指针恢复到目录的起始位置
long telldir(DIR *dirp); //得到当前DIR流指针地址
void seekdir(DIR *dirp, long offset); //与telldir相反,指定DIR流指针地址
int closedir(DIR*dirp); //关闭DIR流操作

struct dirent
{
    ino_t d_ino; //d_ino 此目录进入点的inode
    ff_t d_off; //d_off 目录文件开头至此目录进入点的位移
    signed short int d_reclen; //d_reclen _name 的长度, 不包含NULL 字符
    unsigned char d_type; //d_type d_name 所指的文件类型 d_name 文件名
    har d_name[256];
};

猜你喜欢

转载自blog.csdn.net/ly601579033/article/details/80668811