- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到了(可能)我无法解释的错误,如果有人能解释我会很高兴。
**我写了下面的程序:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>
int main(int argc, char** argv)
{
char arr1[5], arr2[5], arr3[5];
struct iovec iov[3];
ssize_t n;
int fd, i;
fd = open("/home/oz/Desktop/test", O_RDONLY);
if (fd == -1)
{
perror("open error");
return (1);
}
iov[0].iov_base = arr1;
iov[1].iov_base = arr2;
iov[2].iov_base = arr3;
iov[0].iov_len = 5;
iov[1].iov_len = 5;
iov[2].iov_len = 5;
n = readv(fd, iov, 3);
if (n == -1)
{
perror("read error");
return (1);
}
for (i = 0; i < 3; i++)
{
printf("Buffer %d Content : [%s]\n", i, (char *)iov[i].iov_base);
}
// DEBUG - START
printf("Total bytes read : %d\n", (int)n);
char * TEST = iov[0].iov_base;
printf("TEST LAST CHARACTER (int)= %d.\nTEST LENGTH = %d\n", TEST[5], (int)strlen(TEST));
// DEBUG - END
return 0;
我读取的文件内容(单行文本文件):123456789012345678901234567890
**输出
Buffer 0 Content : [12345]
Buffer 1 Content : [67890]
Buffer 2 Content : [12345]
Total bytes read : 15
TEST LAST CHARACTER (int)= 127.
TEST LENGTH = 6
**我的问题:由于某种未知原因,ASCII 值为 127 的字符被添加到第一个缓冲区。 (在我的标准输出中,我实际上在输出的第一行中将其视为“5”和“]”之间的白色方 block 。为什么会发生这种奇怪的事情?
谢谢你..
最佳答案
没有添加额外的字符。您的程序中有两个错误。
TEST[5]
(即 arr1[5]
),它超出了 arr1
数组的末尾。 C ararys是从零开始的,所以唯一有效的值是:arr1[0]
, arr1[1]
, arr1[2]
, arr1[3]
,和arr1[4]
。 arr1[5]
是数组中的第六个条目,而不是第五个。对您的程序进行以下更改:
printf("Buffer %d Content : [%5.5s]\n", i, (char *)iov[i].iov_base);
...
printf("TEST LAST CHARACTER (int)= %d.\nTEST LENGTH = %d\n", TEST[4], 5);
关于c - 使用 readv() linux 系统调用时,冗余字符被添加到缓冲区之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384314/
希望你能帮帮我。 我正在尝试通过 TCP/IP 通过网络发送 1000 位的数据包,我希望也能够在 Cygwin 和 Windows 中使用重叠 I/O 技术。 在 Cygwin 中,我尝试使用“re
Linux 套接字在 readv() 上将错误设置为 ENOENT 的原因是什么? 有问题的套接字是非阻塞的并且在 Ubuntu 10.04 上运行 最佳答案 errno 仅在系统调用返回 -1 时设
我遇到了(可能)我无法解释的错误,如果有人能解释我会很高兴。 **我写了下面的程序: #include #include #include #include #include #includ
我在使用 writev()/readv() 进行的客户端-服务器通信时遇到问题。 我有两个结构,header 和 data 定义如下: typedef struct { int op;
我已经阅读了有关此错误的所有其他线程,但没有运气。 我在 RHEL 6 上使用 PHP-FPM 5.6 运行 Nginx 1.12.2 我在我网站的任何/所有页面上都收到这些错误。它与慢速请求无关。我
此示例取自 Linux System Programming书,第 88 页。 代码:http://pastebin.com/mEfmHbPP 引用的文本文件“buccaneer.txt”包含以下内容
是否有适用于 char * bufs 而不是文件描述符的 readv/writev 等效项? 例如,如果我有一个 char * buf[] 数组,并且我想将其全部复制到一个 char buf * 中。
有一个multiplayer card game我首先在 C 中将其编程为非 fork 套接字服务器(使用 poll() 调用)。 然后添加新功能对我来说太困难了,我已经切换到 Perl(使用 IO:
在 scatter 和 gather(即 readv 和 writev)中,Linux 读取多个缓冲区并从多个缓冲区。 如果说,我有一个包含 3 个缓冲区的向量,我可以使用 readv,或者我可以使用
我有带有 nginx 和 uwsgi 的 flask 的 facebook 应用程序。当它收到来自 facebook 的 POST 时,它总是有错误: readv() failed (104: Con
我只是想使用 readv() 从文件中获取一些数据。但是总是打印垃圾字符。我试图为 iovec.iov_base 分配空间,但没有运气。我什至想到了为什么要使用 readv 函数而不是坚持使用更简单和
我是一名优秀的程序员,十分优秀!