Linux系统编程 -- 文件操作


Linux系统编程 - 文件操作函数整理


stat 函数
获取文件属性,(从 inode 结构体中获取)

int stat(const char *path, struct stat *buf);

成功返回 0;失败返回-1 设置 errno 为恰当值。
参数 1:文件名
参数 2:inode 结构体指针 (传出参数)

文件属性将通过传出参数返回给调用者。
lstat 函数
获取文件属性,(从 inode 结构体中获取)
int lstat(const char *path, struct stat *buf);

成功返回 0;失败返回-1 设置 errno 为恰当值。

【get_file_type.c】
文件类型判断方法:st_mode 取高 4 位。 但应使用宏函数: 
 S_ISREG(m) is it a regular file?
 S_ISDIR(m) directory?
 S_ISCHR(m) character device?
 S_ISBLK(m) block device?
 S_ISFIFO(m) FIFO (named pipe)?
 S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.)
 S_ISSOCK(m) socket? (Not in POSIX.1-1996.)
穿透符号链接:stat:会;lstat:不会	
truncate 函数
截断文件长度成指定长度。常用来拓展文件大小,代替 lseek。

 int truncate(const char *path, off_t length);
 int ftruncate(int fd, off_t length);
 
 成功:0;失败:-1 设置 errno 为相应值
 link 函数
 为已经存在的文件创建目录项(硬链接)
 
 int link(const char *oldpath, const char *newpath);
 
 成功:0;失败:-1 设置 errno 为相应值。
 
 注意:由于两个参数可以使用“相对/绝对路径+文件名”的方式来指定,所以易出错。	
unlink 函数
删除一个文件的目录项;

int unlink(const char *pathname);
 
成功:0;失败:-1 设置 errno 为相应值

注意 Linux 下删除文件的机制:不断将 st_nlink -1,直至减到 0 为止。无目录项对应的文件,将会被操作系统择机释放。(具体时间由系统内部调度算法决定)因此,我们删除文件,从某种意义上说,只是让文件具备了被释放的条件。

unlink 函数的特征:清除文件时,如果文件的硬链接数到 0 了,没有 dentry 对应,但该文件仍不会马上被释放。要等到所有打开该文件的进程关闭该文件,系统才会挑时间将该文件释放掉。	
getcwd 函数
获取进程当前工作目录 (3,标库函数)

char *getcwd(char *buf, size_t size);
 
成功:buf 中保存当前进程工作目录位置。失败返回 NULL
chdir 函数
改变当前进程的工作目录

int chdir(const char *path);
 
成功:0;失败:-1 设置 errno 为相应值
opendir 函数
根据传入的目录名打开一个目录 (库函数) DIR * 类似于 FILE *

DIR *opendir(const char *name); 成功返回指向该目录结构体指针,失败返回 NULL
 参数支持相对路径、绝对路径两种方式
closedir 函数
关闭打开的目录

int closedir(DIR *dirp);

成功:0;失败:-1 设置 errno 为相应值
readdir 函数
读取目录 (库函数)

struct dirent *readdir(DIR *dirp);	

成功返回目录项结构体指针;失败返回NULL设置errno为相应值
需注意返回值,读取数据结束时也返回 NULL 值,所以应借助 errno 进一步加以区分

struct 结构体:
 struct dirent {
 	ino_t d_ino; inode 编号
	off_t d_off; 
 	unsigned short d_reclen; 文件名有效长度
 	unsigned char d_type; 类型(vim 打开看到的类似@*/)
 	char d_name[256];文件名
 };
 
其成员变量重点记忆两个:d_ino、d_name。实际应用中只使用到 d_name。
dup 函数
功能:文件描述符拷贝。

int dup(int oldfd);

 成功:返回一个新文件描述符;失败:-1 设置 errno 为相应值
 		
 使用现有的文件描述符,拷贝生成一个新的文件描述符,且函数调用前后这个两个文件
描述符指向同一文件。
dup2 函数
功能:文件描述符拷贝。重定向文件描述符指向。

int dup2(int oldfd, int newfd);
通过该函数可实现命令行“重定向”功能。使得原来指向某文件的文件描述符,指向其他指定文件。	

成功:返回一个新文件描述符;
	如果 oldfd 有效,则返回的文件描述符与 oldfd 指向同一文件。

失败:如果 oldfd 无效,调用失败,关闭 newfd。返回-1,同时设置 errno 为相应值。	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值