glibc源码分析之chown系列函数

本文探讨了glibc中chown、fchown和lchown三个函数,它们是系统调用的封装,用于改变文件的所有者和组。详细分析了对应的6个系统调用,包括它们的功能和区别,如chown系列用于16位整数转换,而chown32系列支持32位整数转换。这些函数的实现是通过脚本生成的,其中chown调用chown32,fchown调用fchown32,lchown调用lchown32。

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

glibc中关于chown的函数有3个,它们分别是chown,fchown,lchown。它们都是系统调用的封装函数。
关于chown的系统调用有6个,它们分别是lchown(16),fchown(95),chown(182),lchown32(198),fchown32(207),chown32(212)。它们都是用于改变文件的用户ID和组用户ID。chown系列系统调用只能将用户ID和组用户ID改为16位整数。chown32系列系统调用则能将用户ID和组用户ID改为32位整数。
chown系列函数是使用脚本生成封装函数的。

生成的脚本如下:

#define SYSCALL_NAME chown32
#define SYSCALL_NARGS 3
#define SYSCALL_SYMBOL __chown
#define SYSCALL_CANCELLABLE 0
#define SYSCALL_NOERRNO 0
#define SYSCALL_ERRVAL 0
#include <syscall-template.S>
#include <shlib-compat.h>
#if IS_IN (libc)
versioned_symbol (libc, __chown, chown, GLIBC_2_1)
#else
strong_alias (__chown, chown)
#endif

chown函数调用了chown32系统调用。

#define SYSCALL_NAME fchown32
#define SYSCALL_NARGS 3
#define SYSCALL_SYMBOL __fchown
#define SYSCALL_CANCELLABLE 0
#define SYSCALL_NOERRNO 0
#define SYSCALL_ERRVAL 0
#include <syscall-template.S>
weak_alias (__fchown, fchown)
hidden_weak (fchown)

fchown函数调用了fchown32系统调用。

#define SYSCALL_NAME lchown32
#define SYSCALL_NARGS 3
#define SYSCALL_SYMBOL __lchown
#define SYSCALL_CANCELLABLE 0
#define SYSCALL_NOERRNO 0
#define SYSCALL_ERRVAL 0
#include <syscall-template.S>
#include <shlib-compat.h>
#if IS_IN (libc)
versioned_symbol (libc, __lchown, lchown, GLIBC_2_0)
#else
strong_alias (__lchown, lchown)
#endif
#if defined SHARED && IS_IN (libc)
strong_alias (__lchown, __lchown_1)
compat_symbol (libc, __lchown_1, chown, GLIBC_2_0)
#endif

lchown函数调用了了lchown32系统调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值