[C++] 纯文本查看 复制代码
#include <sys/uio.h>
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/uio.h>
int main()
{
struct iovec iov[3];
ssize_t nr;
int fd, i;
char *buf[] = {".net", "groad", "www."};
fd = open ("groad.txt", O_WRONLY | O_CREAT | O_TRUNC, 0755);
if (fd == -1) {
perror ("open");
return 1;
}
/* fill out three iovec structures */
for (i = 0; i < 3; i++) {
iov.iov_base = buf;
iov.iov_len = strlen(buf);
printf ("%d : %d\n", i, iov.iov_len);
}
/* write a single call, write them all out */
nr = writev (fd, iov, 3);
if (nr == -1) {
perror("writev");
return 1;
}
printf ("wrote %d bytes\n", nr);
if (close(fd)) {
perror("close");
return 1;
}
return 0;
}
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <strings.h>
int main()
{
char foo[4];
char bar[5];
char baz[4];
struct iovec iov[3];
ssize_t nr;
int fd, i;
fd = open ("groad.txt", O_RDONLY);
if (fd == -1) {
perror ("open");
return 1;
}
/* set up our iovec structures */
iov[0].iov_base = foo;
iov[0].iov_len = sizeof(foo);
iov[1].iov_base = bar;
iov[1].iov_len = sizeof(bar);
iov[2].iov_base = baz;
iov[2].iov_len = sizeof(baz);
/* read into the structures with a single call */
nr = readv (fd, iov, 3);
if (nr == -1) {
perror ("readv");
return 1;
}
for (i = 0; i < 3; i++) {
printf ("%s", (char *)iov.iov_base);
printf ("\n");
}
if (close(fd)) {
perror ("close");
return 1;
}
return 0;
}