home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer) / NeXT_Developer-3.3.iso / NextDeveloper / Examples / UNIX / LKSOutOfLineData / User / test.c < prev   
Encoding:
C/C++ Source or Header  |  1995-02-10  |  2.1 KB  |  84 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. int main()
  16. {
  17.     kern_return_t   r;
  18.     port_name_t mydriver_port;
  19.     user_data_t data;
  20.     unsigned int data_len;
  21.  
  22.     /* Look up the advertised port of mydriver so we can send it a message. */
  23.     r = netname_look_up(name_server_port, "", "mydriver0", &mydriver_port);
  24.     if (r != KERN_SUCCESS)
  25.     {
  26.     mach_error("Can't find mydriver's advertised port", r);
  27.     exit(1);
  28.     }
  29.  
  30.     //
  31.     // Allocate space for data.  Need to use vm_allocate to set up
  32.     // data or else the LKS won't get paged aligned data.
  33.     //
  34.     r = vm_allocate(task_self(), (vm_address_t *) &data, vm_page_size, TRUE);
  35.     if (r != KERN_SUCCESS)
  36.     {
  37.     mach_error("Call to vm_allocate failed", r);
  38.     exit(1);
  39.     }
  40.  
  41.     strcpy(data, DATA);
  42.     data_len = strlen(data) + 1;
  43.     printf("Data is: %s\n", data);
  44.  
  45.     /* Send out-of-line data to the LKS. */
  46.     printf("Calling mydriver_import().\n");
  47.     r = mydriver_import(mydriver_port, data, data_len);
  48.     if (r != KERN_SUCCESS)
  49.     {
  50.     mach_error("Error calling mydriver_import", r);
  51.     exit(1);
  52.     }
  53.  
  54.     /* remove the out_of_band data from our task's vm */
  55.     r = vm_deallocate(task_self(), (vm_address_t) data, vm_page_size);
  56.     if (r != KERN_SUCCESS)
  57.     {
  58.     mach_error("Error calling mydriver_import vm_deallocate", r);
  59.     exit(1);
  60.     }
  61.  
  62.     /* Receive out-of-line data from the LKS. */
  63.     printf("Calling mydriver_export().\n");
  64.     r = mydriver_export(mydriver_port, &data, &data_len);
  65.     if (r != KERN_SUCCESS)
  66.     {
  67.     mach_error("Error calling mydriver_export", r);
  68.     exit(1);
  69.     }
  70.     
  71.     printf("Trying to access data.\n");
  72.     printf("Contents of data are: %s\n", data);
  73.  
  74.     /* remove the out_of_band data from our task's vm */
  75.     r = vm_deallocate(task_self(), (vm_address_t) data, vm_page_size);
  76.     if (r != KERN_SUCCESS)
  77.     {
  78.     mach_error("Error calling mydriver_export vm_deallocate", r);
  79.     exit(1);
  80.     }
  81.     
  82.     return 0;
  83. }
  84.