int main() { draw_init(); draw_set_canvas(canv, (void *)buff); if(w_connect(&priv_fd, &ifd, &ofd)) return -1; poll_fd = open("/dev/poll/0", 0); pipe_in = open("/dev/pipe/0", 0); pipe_out = open("/dev/pipe/0", 0); poll_set_event(poll_fd, pipe_out, POLL_TYPE_READ); if(fork() == 0) { dup2(pipe_in, 0); dup2(pipe_out, 1); dup2(pipe_out, 2); _exit(execl("/bin/sh", "*sh*", NULL)); } w_send_wcreate(ofd, 0, 0, 0, C*FW, (R+1)*FH, "WTerm"); w_wait_reply(ifd, &hwnd, &shm_key); shm_at(shm_key, buff, SHM_RW); printf("hwnd: %x\n",hwnd); poll_set_event(poll_fd, ifd, POLL_TYPE_READ); draw_title(); term_init(); main_loop(); w_disconnect(priv_fd, ifd, ofd); shm_dt(shm_key, buff); printf("exit with exit code 0\n"); return 0; }
int shmdt(const void *addr) { int ret = shm_dt(addr); errno = ret<0?-ret:0; return ret<0?-1:0; }