Annotation of Examples/UNIX/LKSOutOfLineData/User/test.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.