process_vm_readv_writev.c revision 436e89c602e787e7a27dd6624b09beed41a0da8a
1#define _GNU_SOURCE 1 2 3#include <config.h> 4#include <stdlib.h> 5#include <stdio.h> 6#include <string.h> 7#include <unistd.h> 8#include <sys/types.h> 9#include <sys/uio.h> 10 11static int status = EXIT_SUCCESS; 12 13#ifdef HAVE_PROCESS_VM_READV 14 15static void test_process_vm_readv() 16{ 17 char lbuf[] = "123456"; 18 char rbuf[] = "ABCDEF"; 19 20 struct iovec lvec[2]; 21 struct iovec rvec[2]; 22 23 lvec[0].iov_base = lbuf + 1; 24 lvec[0].iov_len = 1; 25 lvec[1].iov_base = lbuf + 3; 26 lvec[1].iov_len = 2; 27 28 rvec[0].iov_base = rbuf + 1; 29 rvec[0].iov_len = 2; 30 rvec[1].iov_base = rbuf + 4; 31 rvec[1].iov_len = 1; 32 33 if (process_vm_readv(getpid(), 34 lvec, 2, 35 rvec, 2, 36 0 ) < 0 ) { 37 perror("process_vm_readv"); 38 status = EXIT_FAILURE; 39 } 40 41 if (strcmp(lbuf, "1B3CE6") != 0) { 42 fprintf(stderr, "Expected: \"1B3CE6\"; Got: \"%s\"\n", lbuf); 43 status = EXIT_FAILURE; 44 } 45} 46 47#endif /* defined( HAVE_PROCESS_VM_READV ) */ 48 49#ifdef HAVE_PROCESS_VM_WRITEV 50 51static void test_process_vm_writev() 52{ 53 char lbuf[] = "123456"; 54 char rbuf[] = "ABCDEF"; 55 56 struct iovec lvec[2]; 57 struct iovec rvec[2]; 58 59 lvec[0].iov_base = lbuf + 1; 60 lvec[0].iov_len = 1; 61 lvec[1].iov_base = lbuf + 3; 62 lvec[1].iov_len = 2; 63 64 rvec[0].iov_base = rbuf + 1; 65 rvec[0].iov_len = 2; 66 rvec[1].iov_base = rbuf + 4; 67 rvec[1].iov_len = 1; 68 69 if (process_vm_writev(getpid(), 70 lvec, 2, 71 rvec, 2, 72 0 ) < 0 ) { 73 perror("process_vm_writev"); 74 status = EXIT_FAILURE; 75 } 76 77 if (strcmp(rbuf, "A24D5F") != 0) { 78 fprintf(stderr, "Expected: \"A24D5F\"; Got: \"%s\"\n", rbuf); 79 status = EXIT_FAILURE; 80 } 81} 82 83#endif /* defined( HAVE_PROCESS_VM_WRITEV ) */ 84 85int main(int argc, char *argv[]) 86{ 87#ifdef HAVE_PROCESS_VM_READV 88 test_process_vm_readv(); 89#endif 90#ifdef HAVE_PROCESS_VM_WRITEV 91 test_process_vm_writev(); 92#endif 93 return status; 94} 95