home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.0
/
NeXTSTEP3.0.iso
/
NextDeveloper
/
Examples
/
UNIX
/
LKSOutOfLineData
/
User
/
test.c
< prev
Wrap
Text File
|
1992-07-24
|
2KB
|
69 lines
/*
* This program exchanges messages with out-of-line data with the kernel server
* named "mydriver".
*/
#import <mach/mach.h>
#import <mach/mach_error.h>
#import <servers/netname.h>
#import <ansi/stdlib.h>
#import <ansi/stdio.h>
#import "../Library/mydriver.h"
#import <bsd/strings.h>
#define DATA "blah"
void main()
{
kern_return_t r;
port_name_t mydriver_port;
user_data_t data, tmp;
unsigned int data_len;
/* Allocate space for data. Need to use vm_allocate to set up data
* or else the LKS won't get paged aligned data. */
r = vm_allocate((vm_task_t)task_self(), &(vm_address_t)data,
(vm_size_t) 8192, TRUE);
if (r != KERN_SUCCESS) {
mach_error("Call to vm_allocate failed", r);
exit(1);
}
data = strcpy (data, DATA);
data_len = strlen(data);
printf("Data is: %s\n", data);
/* Look up the advertised port of mydriver so we can send it a message. */
r = netname_look_up(name_server_port, "", "mydriver0", &mydriver_port);
if (r != KERN_SUCCESS) {
mach_error("Can't find mydriver's advertised port", r);
exit(1);
}
/* Send out-of-line data to the LKS. */
printf("Calling mydriver_import().\n");
r = mydriver_import(mydriver_port, data, data_len);
if (r != KERN_SUCCESS) {
ma7&$rror("Error calling mydriver_import", r);
exit(1);
}
/* Receive out-of-line data from the LKS. */
printf("Calling mydriver_export().\n");
r = mydriver_export(mydriver_port, &data, &data_len);
if (r != KERN_SUCCESS) {
mach_error("Error calling mydriver_export", r);
exit(1);
}
tmp = data;
printf("Trying to access data.\n");
printf("First data element is: %c\n", *tmp++);
printf("Second data element is: %c\n", *tmp++);
printf("Third data element is: %c\n", *tmp++);
printf("Fourth data element is: %c\n", *tmp++);
printf("Fifth data element is: %c\n", *tmp++);
(void)strncpy(tmp, data, data_len);
printf("Contents of data are: %s\n", tmp);
}