关于linux系统调用接口解析

这篇博客主要介绍了Linux系统中与文件操作相关的系统调用,包括stat函数,用于获取文件状态;access函数,检查文件访问权限;chmod函数,改变文件权限;chown函数,更改文件所有者;truncate函数,截断文件;link函数,创建硬链接;symlink函数,创建符号链接;readlink函数,读取符号链接;unlink函数,删除文件;以及rename函数,重命名文件。详细阐述了每个函数的使用和作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

02. 文件操作相关函数

2.1 stat函数(重点)

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char *path, struct stat *buf);
int lstat(const char *pathname, struct stat *buf);
功能:
	获取文件状态信息
	stat和lstat的区别:
		当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;
		而stat返回的是该链接指向的文件的信息。
参数:
	path:文件名
	buf:保存文件信息的结构体
返回值:
	成功:	0
	失败: -1

struct stat结构体说明:

struct stat {
	dev_t          	st_dev;		//文件的设备编号
	ino_t           st_ino;		//节点
	mode_t      	st_mode;			//文件的类型和存取的权限
	nlink_t        	st_nlink;		//连到该文件的硬连接数目,刚建立的文件值为1
	uid_t           st_uid;		//用户ID
	gid_t           st_gid;		//组ID
	dev_t          	st_rdev;		//(设备类型)若此文件为设备文件,则为其设备编号
	off_t           st_size;		//文件字节数(文件大小)
	blksize_t     	st_blksize;		//块大小(文件系统的I/O 缓冲区大小)
	blkcnt_t      	st_blocks;		//块数
	time_t         	st_atime;		//最后一次访问时间
	time_t         	st_mtime;		//最后一次修改时间
	time_t         	st_ctime;		//最后一次改变时间(指属性)
};

st_mode(16位整数)参数说明

[外链图片转存失败(img-Z6burzrv-1564143537364)(assets/1527683997494.png)]

文件类型判断应使用宏函数

[外链图片转存失败(img-UTSYNFxZ-1564143537370)(assets/1527684045659.png)]

测试程序:

int main()
{
	struct stat buf;
	stat("a.txt", &buf);

	if (S_ISREG(buf.st_mode))
	{
		printf("%s\n", "这是普通文件");
	}

	return 0;
}

2.2 access函数

#include <unistd.h>

int access(const char *pathname, int mode);
功能:测试指定文件是否具有某种属性
参数:
	pathname:文件名
	mode:文件权限,4种权限
		R_OK:	是否有读权限
		W_OK:	是否有写权限
		X_OK:	是否有执行权限
		F_OK:	测试文件是否存在
返回值:
	0:	有某种权限,或者文件存在
	-1:没有,或文件不存在
access("txt", F_OK);

2.3 chmod函数

#include <sys/stat.h>

int chmod(const char *pathname, mode_t mode);
功能:修改文件权限
参数:
	filename:文件名
	mode:权限(8进制数)
返回值:
	成功:0
	失败:-1

2.4 chown函数

#include <unistd.h>

int chown(const char *pathname, uid_t owner, gid_t group);
功能:修改文件所有者和所属组
参数:
	pathname:文件或目录名
	owner:文件所有者id,通过查看 /etc/passwd 得到所有者id
	group:文件所属组id,通过查看 /etc/group 得到用户组id
返回值:
	成功:0
	失败:-1

2.5 truncate函数

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

int truncate(const char *path, off_t length);
功能:修改文件大小
参数:
	path:文件文件名字
	length:指定的文件大小
		a)比原来小, 删掉后边的部分
		b)比原来大, 向后拓展
返回值:
	成功:0
	失败:-1

2.6 link函数

#include <unistd.h>

int link(const char *oldpath, const char *newpath);
功能:创建一个硬链接
参数:
	oldpath:源文件名字
	newpath:硬链接名字
返回值:
	成功:0
	失败:-1

2.7 symlink函数

#include <unistd.h>

int symlink(const char *target, const char *linkpath);
功能:创建一个软链接
参数:
	target:源文件名字
	linkpath:软链接名字
返回值:
	成功:0
	失败:-1

2.8 readlink函数

#include <unistd.h>

ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
功能:读软连接对应的文件名,不是读内容(该函数只能读软链接文件)
参数:
	pathname:软连接名
	buf:存放软件对应的文件名
	bufsiz :缓冲区大小(第二个参数存放的最大字节数)
返回值:
	成功:>0,读到buf中的字符个数
	失败:-1

2.9 unlink函数

#include <unistd.h>

int unlink(const char *pathname);
功能:删除一个文件(软硬链接文件)
参数:
	pathname:删除的文件名字
返回值:
	成功:0
	失败:-1

2.10 rename函数

#include <stdio.h>

int rename(const char *oldpath, const char *newpath);
功能:把oldpath的文件名改为newpath
参数:
oldpath:旧文件名
newpath:新文件名
返回值:
成功:0
失败:-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值