| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | 
							- /* This Hello World demostrate a simple multithread program */
 
- #include "api.h"
 
- #include "pal.h"
 
- #include "pal_debug.h"
 
- int main(int argc, char** argv) {
 
-     int nsend = 5, i;
 
-     PAL_HANDLE handles[nsend];
 
-     if (argc == 1) {
 
-         /* parent */
 
-         pal_printf("Parent: Executing the program\n");
 
-         const char* args[3] = {"HandleSend", "child", NULL};
 
-         char* data          = "Hello World";
 
-         char content[20];
 
-         char uri[80];
 
-         PAL_HANDLE child;
 
-         int bytes;
 
-         pal_printf("Parent: Creating handles\n");
 
-         // Sending pipe handle
 
-         handles[0] = DkStreamOpen("pipe.srv:012", PAL_ACCESS_RDWR, 0, PAL_CREATE_TRY, 0);
 
-         if (!handles[0]) {
 
-             pal_printf("Parent: DkStreamOpen for pipe failed\n");
 
-             goto out;
 
-         }
 
-         // Sending pipe handle
 
-         handles[1] = DkStreamOpen("udp:127.0.0.1:8000", PAL_ACCESS_RDWR, 0, PAL_CREATE_TRY, 0);
 
-         if (!handles[1]) {
 
-             pal_printf("Parent: DkStreamOpen for socket failed\n");
 
-             goto out;
 
-         }
 
-         for (i = 2; i < nsend; i++) {
 
-             snprintf(uri, 80, "file:test_file_%d", i - 2);
 
-             handles[i] = DkStreamOpen(uri, PAL_ACCESS_RDWR, 0600, PAL_CREATE_TRY, 0);
 
-             if (!handles[i]) {
 
-                 pal_printf("Parent: DkStreamOpen failed\n");
 
-                 goto out;
 
-             }
 
-             DkStreamSetLength(handles[i], 0);
 
-         }
 
-         for (i = 0; i < nsend; i++) {
 
-             /* do some write */
 
-             snprintf(content, sizeof(content), "%s%d", data, i);
 
-             bytes = DkStreamWrite(handles[i], 0, sizeof(content), content, NULL);
 
-             if (!bytes) {
 
-                 pal_printf("Parent: DKStreamWrite failed\n");
 
-                 goto out;
 
-             }
 
-             DkStreamFlush(handles[i]);
 
-         }
 
-         pal_printf("Parent: Forking child\n");
 
-         child = DkProcessCreate("file:HandleSend", args);
 
-         if (!child) {
 
-             pal_printf("Parent: Failed creating process\n");
 
-             DkProcessExit(1);
 
-         }
 
-         for (i = 0; i < nsend; i++) {
 
-             pal_printf("Parent: Sending Handle %d\n", i);
 
-             if (!DkSendHandle(child, handles[i])) {
 
-                 pal_printf("Send handle failed\n");
 
-                 goto out;
 
-             }
 
-             DkObjectClose(handles[i]);
 
-         }
 
-         pal_printf("Parent: Finished execution\n");
 
-         DkObjectClose(child);
 
-     } else {
 
-         /* child */
 
-         PAL_HANDLE parent = pal_control.parent_process;
 
-         for (i = 0; i < nsend; i++) {
 
-             pal_printf("Child: Receiving Handle %d\n", i);
 
-             handles[i] = DkReceiveHandle(parent);
 
-             if (!handles[i]) {
 
-                 pal_printf("Child: Failed receiving handle\n");
 
-                 DkProcessExit(1);
 
-             }
 
-         }
 
-         pal_printf("Child: Reading the handles\n");
 
-         for (i = 0; i < nsend; i++) {
 
-             /* do some read */
 
-             pal_printf("Child: Handle %d Type ", i);
 
-             char data[20];
 
-             switch (PAL_GET_TYPE(handles[i])) {
 
-                 case pal_type_file:
 
-                     if ((DkStreamRead(handles[i], 0, 20, data, NULL, 0)))
 
-                         pal_printf("File Data: %s\n", data);
 
-                     else
 
-                         pal_printf("Couldn't read\n");
 
-                     break;
 
-                 case pal_type_pipesrv:
 
-                     pal_printf("Pipe\n");
 
-                     break;
 
-                 case pal_type_udp:
 
-                     pal_printf("Udp\n");
 
-                     break;
 
-                 default:
 
-                     pal_printf("Unknown\n");
 
-             }
 
-             DkObjectClose(handles[i]);
 
-         }
 
-         pal_printf("Child: Finished execution\n\n");
 
-         DkObjectClose(parent);
 
-     }
 
- out:
 
-     for (i = 0; i < nsend; i++) {
 
-         DkObjectClose(handles[i]);
 
-     }
 
-     return 0;
 
- }
 
 
  |