memcpyv()
QNX SDP8.0C Library ReferenceAPIDeveloper
Copy data from one I/O vector to another
Synopsis:
#include <string.h>
size_t memcpyv( const struct iovec *dst,
                int dparts,
                size_t doff,
                const struct iovec *src,
                int sparts,
                size_t soff );
Arguments:
- dst
 - An array of iovec structures that you want to copy the data to.
 - dparts
 - The number of entries in the dst array.
 - doff
 - The offset into data represented by the dst array to start copying to.
 - src
 - An array of iovec structures that you want to copy the data from.
 - sparts
 - The number of entries in the src array.
 - soff
 - The offset into data represented by the src array to start copying from.
 
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The memcpyv() function copies data pointed to by the src I/O vector, starting at offset soff, to the dst I/O vector, starting at offset doff. The number of parts in each I/O vector is specified by sparts and dparts.
Returns:
The number of bytes copied.
Examples:
This example copies data from a two-part I/O vector, starting at offset 5, into a three-part vector, starting at offset 3:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void print_buffer (char * buffer, char * buffer_name,
                   int buffer_len)
{
        int i;
        
        printf ("   %s: '", buffer_name);
        for (i = 0; i < buffer_len; i++)
        {
                if (buffer[i] == 0)
                  printf ("_");
                else
                  printf ("%c", buffer[i]);
        }
        printf ("'\n");
}
        
int main( void )
{
   char msg1a[10]="1234567890",
        msg1b[20]="abcdefghijklmnop",
        msg2a[10], msg2b[10], msg2c[20];
        
   iov_t dest[3], source[2];
   int dparts=3, sparts=2;
   size_t nbytes, doffset=3, soffset=5;
        
   SETIOV (source + 0, &msg1a, sizeof (msg1a));
   SETIOV (source + 1, &msg1b, sizeof (msg1b));
        
   printf ("Original data:\n");
   print_buffer (msg1a, "msg1a", sizeof (msg1a));
   print_buffer (msg1b, "msg1b", sizeof (msg1b));
   SETIOV (dest + 0, &msg2a, sizeof (msg2a));
   SETIOV (dest + 1, &msg2b, sizeof (msg2b));
   SETIOV (dest + 2, &msg2c, sizeof (msg2c));
   memset (msg2a, 0, sizeof (msg2a));
   memset (msg2b, 0, sizeof (msg2b));
   memset (msg2c, 0, sizeof (msg2c));
   
   nbytes = memcpyv ( dest, dparts, doffset,
                      source, sparts, soffset );
   printf ( "\nCopied %d bytes:\n", nbytes );
   print_buffer (msg2a, "msg2a", sizeof (msg2a));
   print_buffer (msg2b, "msg2b", sizeof (msg2b));
   print_buffer (msg2c, "msg2c", sizeof (msg2c));
   return EXIT_SUCCESS;
}
This program produces the following output:
Original data:
   msg1a: '1234567890'
   msg1b: 'abcdefghijklmnop____'
Copied 25 bytes:
   msg2a: '___67890ab'
   msg2b: 'cdefghijkl'
   msg2c: 'mnop________________'
Classification:
| Safety: | |
|---|---|
| Cancellation point | No | 
| Signal handler | Yes | 
| Thread | Yes | 
Page updated: 
