home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / UNIX / LKSOutOfLineData / User / test.c < prev   
Text File  |  1992-07-24  |  2KB  |  69 lines

  1. /*
  2.  * This program exchanges messages with out-of-line data with the kernel server 
  3.  * named "mydriver".
  4.  */
  5.  
  6. #import <mach/mach.h>
  7. #import <mach/mach_error.h>
  8. #import <servers/netname.h>
  9. #import <ansi/stdlib.h>
  10. #import <ansi/stdio.h>
  11. #import "../Library/mydriver.h"
  12. #import <bsd/strings.h>
  13.  
  14. #define DATA "blah"
  15. void main()
  16. {
  17.     kern_return_t   r;
  18.     port_name_t mydriver_port;
  19.     user_data_t data, tmp;
  20.     unsigned int data_len;
  21.  
  22.     /* Allocate space for data.  Need to use vm_allocate to set up data 
  23.      * or else the LKS won't get paged aligned data. */
  24.     r = vm_allocate((vm_task_t)task_self(), &(vm_address_t)data, 
  25.         (vm_size_t) 8192, TRUE);
  26.     if (r != KERN_SUCCESS) {
  27.         mach_error("Call to vm_allocate failed", r);
  28.         exit(1);
  29.     }
  30.  
  31.     data = strcpy (data, DATA);
  32.     data_len = strlen(data);
  33.     
  34.     printf("Data is: %s\n", data);
  35.  
  36.     /* Look up the advertised port of mydriver so we can send it a message. */
  37.     r = netname_look_up(name_server_port, "", "mydriver0", &mydriver_port);
  38.     if (r != KERN_SUCCESS) {
  39.         mach_error("Can't find mydriver's advertised port", r);
  40.         exit(1);
  41.     }
  42.  
  43.     /* Send out-of-line data to the LKS. */
  44.     printf("Calling mydriver_import().\n");
  45.     r = mydriver_import(mydriver_port, data, data_len);
  46.     if (r != KERN_SUCCESS) {
  47.         ma7&$rror("Error calling mydriver_import", r);
  48.         exit(1);
  49.     }
  50.  
  51.     /* Receive out-of-line data from the LKS. */
  52.     printf("Calling mydriver_export().\n");
  53.     r = mydriver_export(mydriver_port, &data, &data_len);
  54.     if (r != KERN_SUCCESS) {
  55.         mach_error("Error calling mydriver_export", r);
  56.         exit(1);
  57.     }
  58.     
  59.     tmp = data;
  60.     printf("Trying to access data.\n");
  61.     printf("First data element is: %c\n", *tmp++);
  62.     printf("Second data element is: %c\n", *tmp++);
  63.     printf("Third data element is: %c\n", *tmp++);
  64.     printf("Fourth data element is: %c\n", *tmp++);
  65.     printf("Fifth data element is: %c\n", *tmp++);
  66.     
  67.     (void)strncpy(tmp, data, data_len);
  68.     printf("Contents of data are: %s\n", tmp);
  69. }