linux文件想关接口

3.1 dup函数

#include <unistd.h>

int dup(int oldfd);
功能:
	通过 oldfd 复制出一个新的文件描述符,新的文件描述符是调用进程文件描述符表中最小可用的文件描述符,最终 oldfd 和新的文件描述符都指向同一个文件。
参数:
	oldfd : 需要复制的文件描述符 oldfd
返回值:
		成功:新文件描述符
		失败: -1

3.2 dup2函数

#include <unistd.h>

int dup2(int oldfd, int newfd);
功能:
	通过 oldfd 复制出一个新的文件描述符 newfd,如果成功,newfd 和函数返回值是同一个返回值,最终 oldfd 和新的文件描述符 newfd 都指向同一个文件。
参数:
	oldfd : 需要复制的文件描述符
	newfd : 新的文件描述符,这个描述符可以人为指定一个合法数字(0 - 1023),如果指定的数字已经被占用(和某个文件有关联),此函数会自动关闭 close() 断开这个数字和某个文件的关联,再来使用这个合法数字。
返回值:
	成功:返回 newfd
	失败:返回 -1

3.3 示例分析

[外链图片转存失败(img-3GTeB265-1564198539014)(assets/1527684617716.png)]

04. fcnlt函数

#include <unistd.h>
#include <fcntl.h>

int fcntl(int fd, int cmd, ... /* arg */);
功能:改变已打开的文件性质,fcntl针对描述符提供控制。
参数:
	fd:操作的文件描述符
	cmd:操作方式
	arg:针对cmd的值,fcntl能够接受第三个参数int arg。
返回值:
	成功:返回某个其他值
	失败:-1

fcntl函数有5种功能:

  1. 复制一个现有的描述符(cmd=F_DUPFD)
    
  2. 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD)
    
  3. 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL)
    
  4. 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN)
    
  5. 获得/设置记录锁(cmd=F_GETLK, F_SETLK或F_SETLKW)
    

参考示例:

// 等价于dup()
	int new_fd = fcntl(fd, F_DUPFD, 0);

	// 获取文件状态标志
	int flag = fcntl(fd, F_GETFL, 0);
	switch (flag & O_ACCMODE)
	{
	case O_RDONLY:
		printf("read only\n");
		break;
	case O_WRONLY:
		printf("write only\n");
		break;
	case O_RDWR:
		printf("read and write\n");
		break;
	default:
		break;
	}

	if (flag & O_APPEND)
	{
		printf("append\n");
	}

	flag |= O_APPEND; // 追加flag
	fcntl(fd, F_SETFL, flag); //设置文件状态标记

05. 目录相关操作(掌握)

5.1 getcwd函数

#include <unistd.h>

char *getcwd(char *buf, size_t size);
功能:获取当前进程的工作目录
参数:
	buf : 缓冲区,存储当前的工作目录
	size : 缓冲区大小
返回值:
	成功:buf中保存当前进程工作目录位置
	失败:NULL

5.2 chdir函数

#include <unistd.h>

int chdir(const char *path);
功能:修改当前进程(应用程序)的路径
参数:
	path:切换的路径
返回值:
	成功:0
	失败:-1

5.3 opendir函数

#include <sys/types.h>
#include <dirent.h>

DIR *opendir(const char *name);
功能:打开一个目录
参数:
	name:目录名
返回值:
	成功:返回指向该目录结构体指针
	失败:NULL

5.4 closedir函数

#include <sys/types.h>
#include <dirent.h>

int closedir(DIR *dirp);
功能:关闭目录
参数:
	dirp:opendir返回的指针
返回值:
	成功:0
	失败:-1

5.5 readdir函数

#include <dirent.h>

struct dirent *readdir(DIR *dirp);
功能:读取目录
参数:
	dirp:opendir的返回值
返回值:
	成功:目录结构体指针
	失败:NULL

相关结构体说明:

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

d_type文件类型说明:

取值含义
DT_BLK块设备
DT_CHR字符设备
DT_DIR目录
DT_LNK软链接
DT_FIFO管道
DT_REG普通文件
DT_SOCK套接字
DT_UNKNOWN未知
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值