- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
除了每种类型可以容纳的值的大小之外,size_t
和 off_t
在用法方面的主要区别是什么? size_t
类型用于绝对大小而 off_t
类型用于偏移是否只是约定?还是比这更深入?
我正在编写一个包装器类,以便使用 mmap
来写入大文件,我想知道最好的类型用于它们的参数。鉴于我想写入 > 4GB 的文件,我很想对所有内容都使用 size_t,但这是最佳做法吗? (或者我应该为某些功能使用一些 off64_t
类型?)
例如,我的 writeAt
函数是否应该声明为:
MMapWriter::writeAt(off64_t offset, const void* src, size_t size)
或
MMapWriter::writeAt(size_t offset, const void* src, size_t size)
最佳答案
size_t
用于对象,off_t
用于文件。
mmap
几乎按照定义合并了这两个概念。我个人认为我会使用 size_t
,因为不管它是什么,映射文件也是(虚拟)内存中的一个数组。
size_t
是标准 C++,off_t
是 Posix,off64_t
是一个 GNU 扩展,与函数 fopen64
、ftello64
等。我认为它应该总是与 64 位 GNU 系统上的 off_t
相同的类型,但不要打赌你的公司没有检查。
如果相关,off_t
是有符号的,而 size_t
是无符号的。但是 size_t
的签名对应物是 ptrdiff_t
,所以当你需要一个签名类型时,它并不意味着你应该使用 off_t
或 >off64_t
.
关于c++ - size_t 和 off_t 的用法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10634629/
我正在尝试使用 c 发送一个 trim 命令,我想出了基于这个答案的方法:how to TRIM a block on SSD disk? . 编译我正在使用的程序 gcc -D_GNU_SOURCE
只是一个简单的问题:我想编译 PHP 7.1.6 并在执行配置脚本时遇到以下问题: checking size of short... (cached) 2 checking size of int.
我的模块中有以下代码,我用 ICC 编译器编译它。 /** * Static (compile-time) assertion. * Basically, use COND to dimensio
在阅读了大量关于 stackoverflow 的报告后,我决定使用 FILE*(通过 std::fstream)来快速操作我的二进制文件。此外,我需要在处理过程中截断我的文件(_chsize 或 ft
我在最后一行收到“int 格式,不同类型的 arg (arg 4)”错误。我应该只转换为 int 还是有更好的方法来处理这个问题? struct stat info; if (stat(file_pa
假设我正在编写一个函数,它将一个float a[] 和一个偏移量放入该数组中,并返回该偏移量处的元素。使用签名是否合理 float foo(float* a, off_t offset); 为了它?还
我们一直在使用 trick从 autotools 复制以确定 off_t 大小以及我们是否需要定义 _FILE_OFFSET_BITS=64。然而,这个技巧似乎在最近的 gcc (>= 4.6) 中失
我正在使用 TCP 从客户端向服务器发送文件。为了标记文件的结尾,我喜欢在实际数据之前发送文件大小。所以我使用 stat查找文件大小的系统调用。这是类型 off_t .我想知道它占用了多少字节,以便我
在将 Lua 数字转换为 off_t 值时,我应该使用 lua_tointeger() 还是 lua_tonumber()? 我检查了 Lua 本身的源代码,我看到他们的 file:seek函数使用
我正在尝试将一些代码从 Windows 移植到 Linux,但我在支持大文件方面遇到困难。当 gcc 使用 -std=c89 而不是 -std=c99 运行时,off_t 似乎被定义。即使是一个微不足
我是 C 的新手,最近遇到了不匹配的数据类型及其内存分配的问题。我正在编写一个非常简单的程序来计算使用 Linux 系统调用读取的文件的异或校验和。 我的问题是:在将 off_t 或 ssize_t
我目前正在编写系统编程作业,其中一部分我需要获取目录中文件的一些信息。 对于文件的状态,我们有 ctime() 函数将 time_t 类型转换为 string 并返回指向它的指针。 但是 uid_t
我将一个文件大小存储在一个二进制文件中,我能够将这个文件大小放入一个 char[8] 缓冲区中。我想将此 char[] 转换为 off_t 类型,以便能够将其作为 truncate(const cha
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How should I print types like off_t and size_t? 我正在使用
除了每种类型可以容纳的值的大小之外,size_t 和 off_t 在用法方面的主要区别是什么? size_t 类型用于绝对大小而 off_t 类型用于偏移是否只是约定?还是比这更深入? 我正在编写一个
我正在使用以下版本的 gcc: $ gcc --version gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 考虑使用 -Werror=sign-conversion
我想使用 MPI 发送/接收 off_t 类型的 vector ,但我一直在读到 off_t 类型在不同平台上可能是不同的东西。我怎样才能做到这一点? 最佳答案 如果您需要最现代的通用操作系统,请使用
我正在尝试打印 off_t 和 size_t 等类型。 printf() 可移植 的正确占位符是什么? 或者是否有一种完全不同的方式来打印这些变量? 最佳答案 打印off_t: printf("%jd
背景:POSIX-defined off_t数据类型是 variable-size depending on the environment 的有符号整数.对于 64 位构建环境,它似乎始终是 64
概要 #include #include int ftruncate(int fd, off_t length); 有人说偏移类型通常是长整数。所以我使用 %ld 来扫描它
我是一名优秀的程序员,十分优秀!