📄 tserver1.c
字号:
#include "unpipc.h"voidserver(void *cookie, char *argp, size_t arg_size, door_desc_t *dp, size_t n_descriptors){ long *arg, result[4]; door_cred_t info; if (argp == DOOR_UNREF_DATA) { printf("door unreferenced\n"); Door_return(NULL, 0, NULL, 0); } printf("server called, thread id %ld, %d bytes of arguments, cookie = %p\n", pr_thread_id(NULL), arg_size, cookie);sleep(3); Door_cred(&info); printf("euid = %ld, ruid = %ld, pid = %ld\n", (long) info.dc_euid, (long) info.dc_ruid, (long) info.dc_pid); arg = (long *) argp; printf("arg[0] = %ld, arg[1] = %ld, arg[2] = %ld, arg[3]= %ld\n\n", arg[0], arg[1], arg[2], arg[3]); result[0] = arg[0] * arg[0]; result[1] = arg[1] * arg[1]; result[2] = arg[2] * arg[2]; result[3] = arg[3] * arg[3]; Door_return((char *) result, sizeof(result), NULL, 0);}static int fd = -1;void *my_thread(void *arg){ int oldstate; if (arg == server) { while (fd == -1) thr_yield(); pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate); Door_bind(fd); Door_return(NULL, 0, NULL, 0); } else err_quit("my_thread: unknown function"); return(NULL); /* never executed */}voidmy_create(door_info_t *iptr){ pthread_t tid; pthread_attr_t attr;printf("tserver1: iptr = %p\n", iptr); Pthread_attr_init(&attr); Pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); Pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); Pthread_create(&tid, &attr, my_thread, (void *) iptr->di_proc); Pthread_attr_destroy(&attr); printf("created server thread %ld\n", pr_thread_id(&tid));}intmain(int argc, char **argv){ struct stat stat; if (argc != 2) err_quit("usage: server1 <pathname>"); Door_server_create(my_create); /* 4create a door descriptor */ fd = Door_create(server, (void *) 44, DOOR_PRIVATE); Fstat(fd, &stat); printf("server() at %p, fmt = %lx\n", server, (long) stat.st_mode & S_IFMT); /* 4bind it to the specified pathname */ unlink(argv[1]); Close(Open(argv[1], O_CREAT | O_EXCL | O_RDWR, FILE_MODE)); Fattach(fd, argv[1]); /* Close(fd); */ /* server() handles all client requests */ for ( ; ; ) pause();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -