当前位置: 技术问答>linux和unix
看一段关于lseek()的代码,里面涉及到系统调用。
来源: 互联网 发布时间:2015-07-16
本文导语: /* Use the _llseek system call directly, because there (once?) was a bug in * the glibc implementation of it. */ #include #if defined(__alpha) || defined (__ia64__) /* On alpha, the syscall is simply lseek, because it's a 64 bit system. */ stat...
/* Use the _llseek system call directly, because there (once?) was a bug in
* the glibc implementation of it. */
#include
#if defined(__alpha) || defined (__ia64__)
/* On alpha, the syscall is simply lseek, because it's a 64 bit system. */
static loff_t llseek( int fd, loff_t offset, int whence )
{
return lseek(fd, offset, whence);/*显示地定位打开一个文件,返回新的文件位移量*/
}
#else
# ifndef __NR__llseek
# error _llseek system call not present
# endif
static _syscall5( int, _llseek, uint, fd, ulong, hi, ulong, lo,
loff_t *, res, uint, wh );
static loff_t llseek( int fd, loff_t offset, int whence )
{
loff_t actual;
if (_llseek(fd, offset>>32, offset&0xffffffff, &actual, whence) != 0)
return (loff_t)-1;
return actual;
}
#endif
#if defined(__alpha) || defined (__ia64__)是什么意思?它那段注释说有一个bug是指什么?
大家对这段代码随便说说,多发表点建议,这是linux中fsck检测FAT文件系统的代码,我移植到其它平台。
* the glibc implementation of it. */
#include
#if defined(__alpha) || defined (__ia64__)
/* On alpha, the syscall is simply lseek, because it's a 64 bit system. */
static loff_t llseek( int fd, loff_t offset, int whence )
{
return lseek(fd, offset, whence);/*显示地定位打开一个文件,返回新的文件位移量*/
}
#else
# ifndef __NR__llseek
# error _llseek system call not present
# endif
static _syscall5( int, _llseek, uint, fd, ulong, hi, ulong, lo,
loff_t *, res, uint, wh );
static loff_t llseek( int fd, loff_t offset, int whence )
{
loff_t actual;
if (_llseek(fd, offset>>32, offset&0xffffffff, &actual, whence) != 0)
return (loff_t)-1;
return actual;
}
#endif
#if defined(__alpha) || defined (__ia64__)是什么意思?它那段注释说有一个bug是指什么?
大家对这段代码随便说说,多发表点建议,这是linux中fsck检测FAT文件系统的代码,我移植到其它平台。
|
这个肯定是有一个类似于configure的程序来检测你的系统,如果你的系统是alpha或者ia64,那么在生成的config.h里就会定义__alpha或者__ia64__
注释写的很清楚,让你选择使用系统调用而不是glibc里的llseek,因为(曾经)有过Bug,这是指Glibc的bug,也许新版本的Glibc已经修正了,要不你就去查一下ChangeLog
注释写的很清楚,让你选择使用系统调用而不是glibc里的llseek,因为(曾经)有过Bug,这是指Glibc的bug,也许新版本的Glibc已经修正了,要不你就去查一下ChangeLog
|
恩,就是这样。