glibc源码分析之truncate系列函数
2017-08-15 20:07
1516 查看
glibc中关于truncate的函数有4个,它们分别是truncate,ftruncate,truncate64,ftruncate64。
truncate和ftruncate可以截断文件为32位长度,truncate64和ftruncate64可以截断文件为64位长度。
truncate函数的源码在sysdeps/unix/sysv/linux/truncate.c文件中。
__truncate 函数封装了truncate系统调用。
truncate64函数的源码在sysdeps/unix/sysv/linux/truncate64.c文件中。
__truncate64 函数封装了truncate64系统调用。
64位的参数length转化为2个32位的参数,这两个参数作为系统调用的参数传给系统调用。
判断是大端还是小端。
ftruncate函数的源码在sysdeps/unix/sysv/linux/ftruncate.c文件中。
__ftruncate 函数封装了ftruncate系统调用。
ftruncate64函数的源码在sysdeps/unix/sysv/linux/ftruncate64.c文件中。
__ftruncate64 函数封装了ftruncate64系统调用。
truncate和ftruncate可以截断文件为32位长度,truncate64和ftruncate64可以截断文件为64位长度。
truncate函数的源码在sysdeps/unix/sysv/linux/truncate.c文件中。
int __truncate (const char *path, off_t length) { return INLINE_SYSCALL_CALL (truncate, path, length); } weak_alias (__truncate, truncate)
__truncate 函数封装了truncate系统调用。
truncate64函数的源码在sysdeps/unix/sysv/linux/truncate64.c文件中。
int __truncate64 (const char *path, off64_t length) { return INLINE_SYSCALL_CALL (truncate64, path, __ALIGNMENT_ARG SYSCALL_LL64 (length)); } weak_alias (__truncate64, truncate64) #ifdef __OFF_T_MATCHES_OFF64_T weak_alias (__truncate64, truncate); #endif
__truncate64 函数封装了truncate64系统调用。
#define SYSCALL_LL64(val) \ __LONG_LONG_PAIR ((long) ((val) >> 32), (long) ((val) & 0xffffffff))
64位的参数length转化为2个32位的参数,这两个参数作为系统调用的参数传给系统调用。
#if __BYTE_ORDER == __LITTLE_ENDIAN # define __LONG_LONG_PAIR(HI, LO) LO, HI #elif __BYTE_ORDER == __BIG_ENDIAN # define __LONG_LONG_PAIR(HI, LO) HI, LO #endif
判断是大端还是小端。
#define __ALIGNMENT_ARG
ftruncate函数的源码在sysdeps/unix/sysv/linux/ftruncate.c文件中。
int __ftruncate (int fd, off_t length) { return INLINE_SYSCALL_CALL (ftruncate, fd, length); } weak_alias (__ftruncate, ftruncate)
__ftruncate 函数封装了ftruncate系统调用。
ftruncate64函数的源码在sysdeps/unix/sysv/linux/ftruncate64.c文件中。
int __ftruncate64 (int fd, off64_t length) { return INLINE_SYSCALL_CALL (ftruncate64, fd, __ALIGNMENT_ARG SYSCALL_LL64 (length)); } weak_alias (__ftruncate64, ftruncate64)
__ftruncate64 函数封装了ftruncate64系统调用。
相关文章推荐
- glibc源码分析之chmod系列函数
- glibc源码分析之stat64系列函数
- glibc源码分析之statfs系列函数
- glibc源码分析之chown系列函数
- glibc源码分析之utime系列函数
- glibc源码分析之stat系列函数
- Muduo网络库源码分析(三)线程间使用eventfd通信和EventLoop::runInLoop系列函数
- Linux-0.11内核源码分析系列:进程调度sleep_on()函数分析
- jQuery-1.9.1源码分析系列(六) 延时对象续——辅助函数jQuery.when
- Linux-0.11内核源码分析系列:内存管理get_free_page()函数分析
- jQuery-1.9.1源码分析系列(六) 延时对象续——辅助函数jQuery.when
- Linux-0.11内核源码分析系列:内存管理up_wp_page()与do_wp_page()函数分析
- jQuery-1.9.1源码分析系列(十六)ajax——ajax处理流程以及核心函数
- Linux-0.11内核源码分析系列:内存管理get_empty_page()与put_page()函数分析
- Linux-0.11内核源码分析系列:内存管理copy_page_tables()函数分析
- Linux-0.11内核源码分析系列:内存管理get_empty_page()与put_page()函数分析
- Linux-0.11内核源码分析系列:内存管理try_to_share()与share_page()函数分析
- Linux-0.11内核源码分析系列:内存管理try_to_share()与share_page()函数分析
- Linux-0.11内核源码分析系列:内存管理free_page()与free_page_tables()函数分析
- glibc函数exit源码分析