- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须将 pwrite() 字符写入文本文件,每个字符代表 1 个字节。另外,我需要将整数写入文本文件,因此 12 也必须是一个字节,而不是 2 个字节(即使是两个字符)。
我正在为字符和整数使用 char *pointer,但我被卡住了,因为文本填充为整数打印了困惑的值(@、颠倒的?等),就像我 pwrite( ) 指针[0] = 105; 105 翻译 text.txt 文件中的“i”(并且 pread() 读作“i”)不知何故 105 在翻译中丢失了。
关于如何正确地 pwrite()/pread() 有什么想法吗?
ofstream file; file.open("text.txt");
char *characters = new char;
characters[0] = 105;
cout << pwrite(3, characters, 1, 0);
此外,3 是文件,我猜 :-P 不知道如何实际找到。然后 text.txt 文件中有“i”(我假设是 ASCII 105)。那么当我 pread() 时,我怎么知道它最初是 'i' 还是 105?
最佳答案
将其分解成 block :
"I have to pwrite() characters to a text file with each character representing 1 byte"
根据定义,每个 ASCI character 是一个字节,您没有提到需要编写可识别区域设置的多字节字符或 Unicode 派生字符,所以我认为您可能已经了解了这一点。
"Also, I need to write integers to the text file, so 12 has to be one byte also, not 2 bytes (even though two characters)"
您正在描述整数数据的二进制写入。但是,请记住,作为数字表示的“整数”可以大于仅由“一个字节”表示的数字。如果你想写一个可以用单个字节表示的整数,你的选择是:
这些是单个八位字节中整数值的限制。
"I am using char *pointer for the characters and integers, but I am getting stuck since the text fill prints jumbled values for the integers (@'s, upside-down ?'s, etc.)"
我们之前介绍过的字符的 char 指针,可能没问题。整数不会。根据您的描述,您生成的文件将不是字面意义上的“文本”文件。它将包含字符数据(您的字符缓冲区)和二进制数据(您的整数)。请记住,单个字节中值为 0x01 的整数就是第一位设置的单个八位字节。表示 ASCI 字符 '1' 的字节的值为 0x31(请参阅任何 ASCI chart ),而 EBCDIC 的值为 0xF1(不要询问)。使用您的示例,**您不能将值 12 写入单个字节并使其成为文件中可显示的“文本”(字符)数据。单字节整数值 12 将在您的文件中表示为单字节值 0x0C。试图将其视为“文本”是行不通的;它不是可打印的 ASCI。事实上,0x0C 的 ASCI 值实际上是一个换页控制字符。
底线,如果您不知道 ASCI 字符和整数字节之间的区别,请解释如何 pwrite()
工作不会有什么好处,只会让你更加困惑。
"Like when I pwrite() pointer[0] = 105; The 105 translates 'i' in the text.txt file (and pread() reads as 'i') Somehow the 105 is lost in translation"
请参阅此答案中链接多个位置的 ASCI 图表。字节值 105 实际上是字符“i”的 ASCI 值。 105 没有丢失;它被显示为它所代表的角色。
最后,pwrite()
是 Linux、BSD 和任何其他选择公开它的人的 POSIX 系统调用。它不是 C 或 C++ 标准的一部分。也就是说,pwrite()
的第一个参数应该从系统调用 open()
中获得。 .除非您通过支持的 API 执行此操作,否则您应该永远不要搭载假定由不同的 api 调用打开的文件描述符。这个问题的代码没有。
关于C++ pwrite(), pread() 数据到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548161/
所以我有一个函数,它需要一个偏移量和一个宽度来从设备(通常是硬盘)读取。现在我目前使用 fseeko() 和 fread() 从磁盘读取。但是我喜欢用 pread 替换它,因为它更简洁。然而,无论如何
如果我的代码执行类似fd = open("/dev/sdXY", ...) 和pwrite(fd, ...)/pread(fd, ...),I/O 操作是否跳过缓冲区或磁盘缓存?假设 /dev/sdX
我必须将 pwrite() 字符写入文本文件,每个字符代表 1 个字节。另外,我需要将整数写入文本文件,因此 12 也必须是一个字节,而不是 2 个字节(即使是两个字符)。 我正在为字符和整数使用 c
我无法理解为什么 lseek 函数很有用。假设我从用户那里得到了这样的参数: off_t offset = 10; 我想从偏移量中读取 100 个字节。我可以像这样使用 pread: void * b
我正在尝试本地推送到网络驱动器上的共享存储库。我收到以下错误: :~/git push origin master Counting objects ... done Writing objects
我正在尝试使用 pread 和 pwrite,以便我可以查找到文件的开头并在一个原子操作中开始读取或写入。这两个函数都会为我做,但是,我遇到的问题是编译器给我 warning: implicit de
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
所以我使用 qemu kvm 有一段时间了,现在我需要直通 PCI 设备。我做了所有必要的程序来完成这项工作:启用 iommu、modprobed vfio 模块、将设备绑定(bind)到 vfio
我们使用 Ghostscript 从 PDF 中提取第一页,有时 gs 进程卡住并出现错误消息 pread(4, 0x21c56910, 32768, 18446744073709518848) =
所以我有一个测试程序,它将大量数据读入缓冲区并 mallocs相应地缓冲。然而,它 malloc 在大尺寸上失败。 有办法解决这个问题吗? 感谢任何回复 设备/dev/sdc 是一个 2TB 的磁盘。
我正在使用 Linux 内核空间中的 systemtap 探针,因此我无法使用常规的 pread 系统调用。内核空间中是否存在等价的 pread 系统调用? 我的 friend 发现了这个: http
我正在尝试学习 linux api,但有些函数名称(至少对我而言)似乎很麻烦。 谁能给我解释一下 pwrite/pread 中的首字母 p 代表什么? 最佳答案 我只是猜测,但是由于 pread()
什么叫最好的模仿 pread/pwrite在 MSVC 10 中? 最佳答案 在 C 运行时库级别,查看 fread , fwrite和 fseek . 在 Win32 API 级别,查看 ReadF
我的程序(如下)将文本(使用 pwrite())写入文件并从文件中读取(使用 pread())。我的问题是 pread 函数没有从文件中读取我的文本,而 close 函数有什么问题(程序的最后一部分)
嘿,如果我问的是琐碎的问题,请不要介意,但是,请有人帮我解决这个问题.. 最佳答案 分为两部分: pread/pwrite和read/write的区别: 它们都处于同一级别,即系统调用。有两个区别:
我正在使用 GitPython 将一个存储库从 GitHub 克隆到 databricks dbfs 位置,如下所示: outdir = "dbfs:/tmp/project" repo = Repo
我想 fwrite() 是将数据从用户应用程序传递到用户模式下的缓冲区,但是 write() 是将数据从用户模式下的缓冲区传递到内核模式下的缓冲区,而 fsync () 是在内核模式下将数据从缓冲区传
我有一个简单的 django 网站,我试图用 nginx 和 uwsgi 加载。 当我尝试测试我的 nginx 配置时,我得到以下信息: $ sudo nginx -t nginx: [crit] p
在编码时,我的“Docker 容器”崩溃了好几次。查看日志,这是它向我显示的内容: [crit] 1#1: pread() "/etc/nginx/conf.d/default.conf" faile
我是一名优秀的程序员,十分优秀!