当前位置:  技术问答>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文件系统的代码,我移植到其它平台。

|
这个肯定是有一个类似于configure的程序来检测你的系统,如果你的系统是alpha或者ia64,那么在生成的config.h里就会定义__alpha或者__ia64__
注释写的很清楚,让你选择使用系统调用而不是glibc里的llseek,因为(曾经)有过Bug,这是指Glibc的bug,也许新版本的Glibc已经修正了,要不你就去查一下ChangeLog

|
恩,就是这样。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • lseek函数的疑惑
  • 请问一个lseek的问题?
  • 一个文件多次打开,分别用lseek调整当前文件位移,他们互相之间会影响吗?
  • 求助一个关于lseek64的问题
  • 哪位老大能讲一下lseek函数和dup与dup2函数是干什么用的,最好有实例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3