- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
#include <stdio.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int fd;
fd=open(argv[1],O_RDWR|O_APPEND);
printf("fd=%d\n",fd);
char *str0 = "hello ";
char *str1 = "world ";
int x=5;
//char ch = 'a';
struct iovec iov[3];
ssize_t nwritten;
iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);
iov[2].iov_base = (&x);
iov[2].iov_len = sizeof(x);
nwritten = writev(1, iov, 3);//1 for stdout
printf("\n number written=%d\n",nwritten);
}
这里不是在标准输出中打印整数值。请任何人为我提出一些解决方案。
我的实际输出是
hello world
我要
hello world 5
最佳答案
您的问题属于您希望在stdout
中看到的ASCII
格式。您正在向 stdout
写入 x
的值,即 5
它不是 ASCII
中的可打印字符>.
如果您使用 x=0x31
测试您的代码,您将看到:hello world 1
因为 0x31
是 的 ASCII 值>'1'
示例代码:
#include <stdio.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int fd;
fd=open(argv[1],O_RDWR|O_APPEND);
printf("fd=%d\n",fd);
char *str0 = "hello ";
char *str1 = "world ";
int x=0x31;
//char ch = 'a';
struct iovec iov[3];
ssize_t nwritten;
iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);
iov[2].iov_base = (&x);
iov[2].iov_len = sizeof(x);
nwritten = writev(1, iov, 3);//1 for stdout
printf("\n number written=%zd\n",nwritten);
}
输出
hello world 1
number written=16
如您所见,我还更改了 nwritten
变量的格式说明符。 ssize_t
类型需要 %zd
作为格式说明符。
另一种方法是使用 snprintf 将整数值转换为 ASCII
功能:
#include <stdio.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int fd;
fd=open(argv[1],O_RDWR|O_APPEND);
printf("fd=%d\n",fd);
char *str0 = "hello ";
char *str1 = "world ";
int x=5;
char intStr[2];
snprintf(intStr, sizeof(intStr), "%d", x);
//char ch = 'a';
struct iovec iov[3];
ssize_t nwritten;
iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);
iov[2].iov_base = intStr;
iov[2].iov_len = strlen(intStr);
nwritten = writev(1, iov, 3);//1 for stdout
printf("\n number written=%zd\n",nwritten);
}
输出
hello world 5
number written=16
关于c - 此处的 writev 操作示例不在标准输出中打印整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38889255/
这是man writev说: The data transfers performed by readv() and writev() are atomic: the data written by
我正在研究 writev 和 readv,当我显示内存内容时,我得到了奇怪的数据: struct iovec *iov = malloc(sizeof(struct iovec) * 3); iov[
我尝试将 writev 与 direct IO 结合起来。但是当我和他们结合时,我失败了。 下面的代码有效,但如果我在 open() 时添加 O_DIRECT 则失败 失败时我总是得到“无效参数”。
#include #include #include #include int main(int argc, char *argv[]) { int fd; fd=open(a
我已经阅读了 writev 的手册页并发现 ERRORS 部分指出 EINVAL ... the vector count iovcnt is less than zero or greater th
假设我通过TCP套接字连接到客户端,并在套接字上调用writev并包含3个项目,说“从地址A写入16个字节,从地址B写入32个字节,再从地址A写入16个字节”。 是将完整的64字节消息组装在我的机器的
希望你能帮帮我。 我正在尝试通过 TCP/IP 通过网络发送 1000 位的数据包,我希望也能够在 Cygwin 和 Windows 中使用重叠 I/O 技术。 在 Cygwin 中,我尝试使用“re
我有很多 send(fd, buf, len, MSG_DONTWAIT | MSG_NOSIGNAL) 我想合并成一个 writev(fd, iov, iovcnt) 但是,writev 无法识别
writev 函数接受一个 struct iovec 数组作为输入参数 writev(int fd, const struct iovec *iov, int iovcnt); 输入是需要写入文件(比
我在 Docker 容器中为我的项目使用 React、React-Redux 和 Webpack,但一直遇到这个错误 internal/stream_base_commons.js:59 var er
是否有适用于 char * bufs 而不是文件描述符的 readv/writev 等效项? 例如,如果我有一个 char * buf[] 数组,并且我想将其全部复制到一个 char buf * 中。
有一个multiplayer card game我首先在 C 中将其编程为非 fork 套接字服务器(使用 poll() 调用)。 然后添加新功能对我来说太困难了,我已经切换到 Perl(使用 IO:
我正在运行旧的 Angular 应用程序:[angular/cli-1.4.5,node:10.13.0 and windows: win32 x64]。当我为我的应用程序提供服务时,它编译成功,但是
在 scatter 和 gather(即 readv 和 writev)中,Linux 读取多个缓冲区并从多个缓冲区。 如果说,我有一个包含 3 个缓冲区的向量,我可以使用 readv,或者我可以使用
我只是想使用 readv() 从文件中获取一些数据。但是总是打印垃圾字符。我试图为 iovec.iov_base 分配空间,但没有运气。我什至想到了为什么要使用 readv 函数而不是坚持使用更简单和
我有一个与 USB 交互的程序,我想知道以下写入命令告诉我什么。我知道 writev iovec 结构由数据数组指针和长度组成,但是 "@\10\335\320\2w\4\240K\252\0\7"
我是一名优秀的程序员,十分优秀!