在Linux x86(32位)系统上编译的程序放到Linux x86_64(64位)系统上运行的时候出现调用lstat或lstat函数的错误,返回的错误码值为75,错误描述为“Value too large for defined data type”。
为了让程序能够使用LFS(大文件系统),你可以选择使用下面的方法:使用gcc -D_FILE_OFFSET_BITS=64重新编译程序,这会强制都使用64位版本的系统调用来访问所有的文件。这也将改变几种数据类型,例如:off_t变为off64_t,stat变为stat64_t。因此,总是使用正确的数据类型而不使用例如int替代off_t是非常重要的。为了满足其它平台下的可移植性,你应该使用getconf
LFS_CFLGAS获取编译选项。在Linux平台上它会返回-D_FILE_OFFSET_BITS=64选项,但也可能返回_EFILE_SOURCE和_LARGFILE64_SOURCE。使用这些定义,你可以直接使用LFS函数,例如open64,lstat64,fstat64,creat64等。使用O_LARGEFILE标志打开文件,对LFS进行操作。运行info libc “Feature Test Macros”可以得到特征测试宏的完整文档说明。
备注:在<sys/types.h>中有如下的宏定义。
#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
# define __USE_FILE_OFFSET64 1
#endif
补充说明:
在程序中使用stat,fstat和lstat函数检查文件的属性。他们在stat结构中返回属性的信息(stat结构)。所有三个函数在<sys/stat.h>头文件中声明。
函数:int stat(const char * filename, struct stat *buf)
stat函数在指向buf的stat结构中返回关于filename文件属性的信息。如果filename是符号链接,你获得的描述文件的属性就是链接所指向文件的属性。如果链接指向一个不存在的文件,那么stat调用失败,并且报告一个不存在的文件。
如果操作成功那么返回值为0,失败则返回-1。除了通常的文件名错误外,还定义有如下的errno出错条件。
ENOENT filename命名的文件不存在。
当源代码使用_FILE_OFFSET_BITS==64进行编译时,该函数实际上就是stat64,因为使用LFS支持的接口替代普通的实现。
函数:int stat64(const char *filename, struct stat64 *buf)
此函数与stat类似,区别在于它能够在32位系统上处理大于2G的文件。为了达到这个目的,结果保存到一个struct stat64类型的变量buf上。当源代码中使用_FILE_OFFSET_BITS==64来编译时,该函数在使用stat为函数名时也有效,当然在32位机器上替代小文件的接口。
函数:fstat(int filedes, struct stat* buf)
fstat函数与stat类似,只是在打开文件时使用文件描述符替代文件名作为参数。像stat函数一样,fstat函数调用成功返回0,失败则返回-1.下面errno错误情况是针对fstat定义的。
EBADF filedes参数是一个无效的文件描述符;
如果使用_FILE_OFFSET_BITS==64来编译时,该函数实际上是fstat64,因此使用LFS文件支持的接口替代普通的实现。
函数:int fstat64(int filedes, struct stat64 * buf)
此函数与fstat类似,区别在于它能够在32位系统上处理大于2^31的文件。因为LFS的文件描述符一般使用open64或者creat64函数得到。Buf指针指向的变量类型为struct stat64,用来代表LFS。当源代码中使用_FILE_OFFSET_BITS==64来编译时,该函数在使用stat为函数名时也是有效的,当然在32位机器上替代下文件的接口。
函数:int lstat(const char *filename, struct stat *buf)
lstat函数与stat类似,区别在于lstat函数不跟随符号链接。如果flename参数是一个符号链接,lstat函数仅仅返回链接本身的信息,否则lstat和stat函数的作用是相同的。
如果使用_FILE_OFFSET_BITS==64来编译时,该函数实际上就是stat64,因此使用LFS支持的接口替代普通的实现。
函数:int lstat64(const char *filename, struct stat64 *buf)
此函数与stat类似,区别在于它能够在32为系统上处理大于2G大小的文件。为了达到这个目的,结果保存到一个struct stat64类型的buf变量中。当源代码中使用_FILE_OFFSET_BITS==64来编译时,该函数在使用lstat为函数名时也有效,当然在32为机器上替代小文件的接口。
分享到:
相关推荐
32位架构是得到Linux最广泛支持的,并且对开放资源和商业软件的兼容性最好。 另一方面,本书的用法说明已知,通过一些修改,该系统可以在 Power PC 和64位的AMD/Intel CPU 架构下运行。 为了构建适合这些CPU的系统...
全面支持中文 LINUX FROM SCRATCH (LFS) 中文安装手册索引
许多知名的云计算服务提供商都采用Linux系统作为其基础架构,一些游戏平台和游戏开发工具采用Linux作为支持的操作系统,例如Steam平台上的某些游戏。Linux系统在科学计算、数据分析和机器学习等领域也有广泛应用。...
对于有人员和专家维护 Linux 系统,但没有资金从咨询机构和公司购买商业支持的机构来说,该功能特别重要。已经针对教学目的和大型网络,演示了基于 LFS 的 Linux 系统。它们也有可能用于其他领域。
默认情况下, lfs仅显示由普通块设备(即磁盘)支持的安装点。 要显示所有内容,请使用 lfs -a 要将输出获取为JSON,请执行lfs -j或lfs -a -j 。 内部构造 如果要在Rust应用程序中显示相同的数据,请查看板条箱。
肌肉LFS Linux From Scratch,使用Musl作为Libc和S6 + S6-rc作为初始化系统 这是基于Linux From Scratch( )的工作,该工作使用GLibc和SysVinit / systemD。 其他工作来自Void Linux( ),Alpine Linux( )和...
课程:Linux Foundation LFS171x 课程“Blockchain for Business - 超级账本技术简介” 第 1 章 - 发现区块链技术 第 1 节 - 分布式账本技术 (DLT) 第 1 课 - 背景 - 人们对分布式账本技术的兴趣日益浓厚 回顾过去半...
适用于Linux From Scratch(LFS)和支持工具的模块化自动化构建系统
打包机-lfs-build-host 这是一个模板,用于为构建构建合适的构建系统。 结果系统 运行此构建将创建一个最小的主机系统,该系统在生成的系统上具有兼容性和最小的占用空间。 这个模板** 应该** 始终满足主机系统上...
是一个文件共享和协作应用程序。 它的工作方式与Dropbox一样,您可以在自己的服务器上运行它。 它可用于Linux发行版,macOS和... 注意:默认情况下,SparkleShare在Linux上使用AppIndicator状态图标。 如果您在Ub
在您的平台上本地克隆和编辑。 该图像将从那里获取,并将您的代码转换为二进制文件,然后您可以或。 它还可以从您的Lua来源创建LFS图像。 配置模块和功能 构建固件 选项 Windows用户注意事项 macOS用户注意事项 ...
基于GNU / LinuxLinux发行版,带有以下额外的软件包: 黑泽包装管理器(KPM)[冲突:dpkg] Kuroasawa软件包工具集(KPT)[冲突:apt] 支持的体系结构:i386(i686)amd64(x86-64)armhf aarch64(arm64) ...
Ramone是一个基于LFS(Linux From Scratch)项目的DIY GNU / Linux发行版。 RPM用作Ramone的软件包管理器,您可以在Ramone上使用“ yum”,“ mock”。 默认的桌面环境是GNOME,并且还支持KDE,XFCE,LXDE。 Ramone...
用C#/ WPF编写(将来将通过Xamarin.Forms 3.0支持macOS和Linux / BSD)。 图像差异预览。 彩色文本差异预览。 自动检查.gitignore文件。 自动检查Git-LFS安装。 不允许暂存未解析的文件而不会发出警告。 支持Meld...
http://man.chinaunix.net/linux/lfs/htmlbook/chapter06/chapter06.html参考具体的gcc相关软件安装 本人的联系方式为:549827768@qq.com,西华大学 我们采用crosstool0.42来作为我们编译交叉编译工具链的脚本。详细...
它还删除了许多非核心功能: 没有链接到系统库使用符号链接减小输出大小没有Perl运行时不依赖于OpenSSL 没有Tcl / Tk GUI 错误消息没有翻译不支持32位该工具链还包含其他自定义项: Git-LFS 适用于Linux使用者的...
使用Go,可以在Go支持的所有平台(包括Linux,macOS,Windows和ARM)上进行独立的二进制分发来完成此任务。 :satellite_antenna: 概述请访问以获取用户文档。 请参阅以获取每个版本中的更改列表。 是否想先尝试一下...
该角色希望您将文件内部托管在Nexus之类的工件服务器上,或者作为未经身份验证的LFS git对象托管。 我知道模板jinja2 json文件也是上载配置的潜在途径,并且希望能够支持这样的优雅请求。 channel: prod ...
NILFS是支持连续快照的日志结构文件系统(LFS)的新实现。 除了整个文件系统的版本控制功能外,用户甚至可以恢复几秒钟前被错误覆盖或破坏的文件。 由于NILFS可以像传统LFS一样保持一致性,因此可以在系统崩溃后快速...
Git的企业配置 一个轻松的Git设置,使用GitHub Enterprise在公司内共享Git... 用于Git的Enterprise Config支持Windows,Mac和Linux以及许多Shell,例如BASH,ZSH,DASH,cmd.exe和PowerShell。 请在相应的Git Merge 20