int SLang_init_tty(int abort_char, int dum2, int dum3) { VIOCURSORINFO cursorInfo, OldcursorInfo; (void) dum2; (void) dum3; if (abort_char == -1) abort_char = 3; /* ^C */ SLang_Abort_Char = abort_char; SLKeyBoard_Quit = 0; /* set ^C off */ signal (SIGINT, SIG_IGN); signal (SIGBREAK, SIG_IGN); /* set up the keyboard */ initialKbdInfo.cb = sizeof(initialKbdInfo); KbdGetStatus(&initialKbdInfo, 0); set_kbd(); /* open a semaphore */ CreateSem(); /* start a separate thread to read the keyboard */ #if defined(__BORLANDC__) SLos2_threadID = _beginthread (thread_code, 8096, NULL); #else SLos2_threadID = _beginthread (thread_code, NULL, 8096, NULL); #endif if ((int)SLos2_threadID == -1) { SLang_exit_error ("init_tty: Error starting keyboard thread."); } VioGetCurType (&OldcursorInfo, 0); cursorInfo.yStart = 1; cursorInfo.cEnd = 15; cursorInfo.cx = 1; cursorInfo.attr = 1; if (VioSetCurType (&cursorInfo, 0)) VioSetCurType (&OldcursorInfo, 0); /* reset to previous value */ return 0; }
int main(void) { key_t key; /*信号量的键值*/ int semid; /*信号量的ID*/ char i; int value = 0; key = ftok("/ipc/sem",'a'); /*建立信号量的键值*/ semid = CreateSem(key,100); /*建立信号量*/ for (i = 0;i <= 3;i++){ /*对信号量进行3次增减操作*/ Sem_P(semid); /*增加信号量*/ Sem_V(semid); /*减小信号量*/ } value = GetvalueSem(semid); /*获得信号量的值*/ printf("信号量值为:%d\n",value); /*打印结果*/ DestroySem(semid); /*销毁信号量*/ return 0; }