int DB_Read_PayJnls_By_LocalDate_LocalLogNo(char *localdate, char *locallogno, char *JsonStr) { Py_Initialize(); if(!Py_IsInitialized()) { printf("初始化失败"); return -1; } getcurrent(); PyObject *pModule=NULL, *pArg=NULL, *pFunction=NULL, *result = NULL; pModule = PyImport_ImportModule("py_oracle_read"); pFunction = PyObject_GetAttrString(pModule, "DB_connect"); pArg = Py_BuildValue("(ss)",localdate, locallogno); result = PyEval_CallObject(pFunction, pArg); char *str = NULL; PyArg_Parse(result, "s", &str); strcpy(JsonStr, str); Py_Finalize(); if(strcmp(JsonStr, "NoneSQL") == 0) return SQLNOTFOUND; else if(strcmp(JsonStr, "DatabaseError") == 0) return DATABASEERROR; else return TTS_SUCCESS; }
static void softerr_intr(void) { puts(current->name); puts(" DOWN.\n"); getcurrent(); /* レディーキューから外す */ thread_exit(); /* スレッド終了する */ }
static void softerr_intr(void) { puts(current->name); puts(" DOWN.\n"); getcurrent(); thread_exit(); }
/*! * システム・コールの処理(chg_pri():タスクの優先度変更) * タスクの状態が未登録状態,休止状態の場合は変更できない * 同じレベルでの優先度変更は変更対象タスクはそれぞれの待ち行列の最後に接続される * E_NOEXSはμITRONにはない * E_PARは上限優先度違反ではなく(シーリング値はシステムコールの引数指定しない)デフォルト時の優先度個数とする * (defines.hに記述してあるやつ) * tcb : 変更対象のタスクコントロールブロックへのポインタ * tskpri : 変更する優先度 * (返却値)E_PAR : エラー終了(tskpriが不正) * (返却値)E_OBJ : エラー終了(タスクが休止状態) * (返却値)E_OK : 正常終了 */ ER chg_pri_isr(TCB *tcb, int tskpri) { /*優先度は有効化か*/ if (tskpri < 0 || PRIORITY_NUM < tskpri) { DEBUG_LEVEL1_OUTMSG(" not change priority is deffer tskpri : chg_pri_isr().\n"); return E_PAR; } /*休止状態の場合*/ else if (tcb->state == TASK_DORMANT) { DEBUG_LEVEL1_OUTMSG(" not change priority is tsk dormant : chg_pri_isr().\n"); return E_OBJ; } /*その他の場合優先度を変更する*/ else { /* 実行状態タスクがタスクコンテキスト用システムコールを呼んだ場合 */ if (g_current->syscall_info.flag == MZ_SYSCALL) { getcurrent(); /* システムコール発行タスクをレディーから抜き取る */ chg_pri_syscall_isr(tcb, tskpri); /*優先度変更*/ } /* 実行状態タスクが非タスクコンテキスト用システムコールを呼んだ場合 */ else if (g_current->syscall_info.flag == MZ_ISYSCALL) { chg_pri_isyscall_isr(tcb, tskpri); /*優先度変更*/ } return E_OK; } }
/*! * schedule_odrone()のコールバックルーチン * *argv : つねにNULL(タイマ割込みが発生したならば,現在実行中のタスクがcurrentに設定してあるため) */ void schedule_odrone_callrte(void *argv) { /* タスクをactivキューからexpiredキューに移動させる */ getcurrent(); /* 実行中のタスクは優先度レベルのactivレディーキュー先頭なので,先頭を抜き取る */ put_current_tmpri_expiredque(); /* 抜き取ったタスクを優先度レベルのexpiredレディーキューの最尾へつなぐ */ mg_schdul_info.entry->un.odrone_schdul.tobjp = 0; /* タイマブロックとの接続をクリアにしておく */ }
static void syscall_proc( kz_syscall_type_t type, kz_syscall_param_t* p ) { getcurrent(); call_functions(type, p); }
/*! * schedule_rps()のコールバックルーチン * *argv : つねにNULL(タイマ割込みが発生したならば,現在実行中のタスクがcurrentに設定してあるため) */ void schedule_rps_callrte(void *argv) { /* タスクを回転させる(入れ替える) */ getcurrent(); /* 実行中のタスクは優先度レベルのレディーキュー先頭なので,先頭を抜き取る */ putcurrent(); /* 抜き取ったタスクを優先度レベルのレディーキューの最尾へつなぐ */ mg_schdul_info.entry->un.rps_schdul.tobjp = 0; /* タイマブロックとの接続をクリアにしておく */ }
/* システムコールの処理 */ static void syscall_proc(kz_syscall_type_t type, kz_syscall_param_t *p) { /* * システムコールを呼び出したスレッドをレディキューから外した状態で * 処理関数を呼び出す。このためシステムコールを呼び出したスレッドを * そのまま動作継続させたい場合は、処理関数内部でputcurrent()を実行する。 */ getcurrent(); call_functions(type, p); }
/* システム・コールの処理 */ static void syscall_proc(kz_syscall_type_t type, kz_syscall_param_t *p) { /* * システム・コールを呼び出したスレッドをレディー・キューから * 外した状態で処理関数を呼び出す.このためシステム・コールを * 呼び出したスレッドをそのまま動作継続させたい場合には, * 処理関数の内部で putcurrent() を行う必要がある. */ getcurrent(); call_functions(type, p); }
/*! * schedule_fr()のコールバックルーチン * *argv : つねにNULL(タイマ割込みが発生したならば,現在実行中のタスクがcurrentに設定してあるため) */ void schedule_fr_callrte(void *argv) { getcurrent(); /* 実行中タスクをレディーから抜く */ /* 実行時間の加算(CPUバウンドかI/Oバウンドの公平性実現) */ current->schdul_info->un.fr_schdul.rel_exetim += mg_schdul_info.entry->un.fr_schdul.tmout; putcurrent(); /* 再度レディーへ */ mg_schdul_info.entry->un.fr_schdul.tobjp = 0; /* タイマブロックとの接続をクリアにしておく */ }
/*! * schedule_mfq()のコールバックルーチン * *argv : つねにNULL(タイマ割込みが発生したならば,現在実行中のタスクがcurrentに設定してあるため) */ void schedule_mfq_callrte(void *argv) { getcurrent(); /* 実行中タスクをレディーから抜く */ /* 最低優先度になるまで優先度を下げる */ if (current->priority != PRIORITY_NUM - 1) { current->priority++; /* タイムアウトしたので優先度を一つ下げる */ } putcurrent(); /* レディーへ戻す */ mg_schdul_info.entry->un.mfq_schdul.tobjp = 0; /* タイマブロックとの接続をクリアにしておく */ }
void main(int argc, char **argv) { int t; int parse; String *h; Whist *doc; rfork(RFNAMEG); t = Tpage; ARGBEGIN{ default: usage(); case 'd': wikidir = EARGF(usage()); break; case 'h': t = Thistory; break; case 'o': t = Toldpage; break; case 'D': t = Tdiff; break; case 'P': parse = 1; }ARGEND if(argc != 1) usage(); if(t == Thistory || t==Tdiff) doc = gethistory(atoi(argv[0])); else doc = getcurrent(atoi(argv[0])); if(doc == nil) sysfatal("doc: %r"); if(parse){ printpage(doc->doc->wtxt); exits(0); } if((h = tohtml(doc, doc->doc+doc->ndoc-1, t)) == nil) sysfatal("wiki2html: %r"); write(1, s_to_c(h), s_len(h)); exits(0); }
/*! * 非タスクコンテキスト用の優先度変更関数 * -システムコール発行タスク(実行状態タスク)はレディーから抜き取られてくる場合と抜き取られない場合がある * 抜き取られる場合 : システムコール割込みの非タスクコンテキストで呼ばれる * 抜き取られない場合 : シリアル割込みハンドラの非タスクコンテキストで呼ばれる(シリアル割込みはタスクを切り替えず, * かつユーザが自作できるものとしてしている) * *tcb : 優先度変更対象タスク * tskpri : 変更する優先度 */ static void chg_pri_isyscall_isr(TCB *tcb, int tskpri) { /* * /優先度変更タスクが実行状態の場合,実行状態タスクはレディーから抜き取られる場合と * 抜き取られない場合がある * /抜き取られる場合は優先度を変更するのみ * /抜き取られない場合は一度レディーから実行状態タスクを抜き取り,優先度を変更して,再度レディーへ戻す */ if (tcb == g_current) { /* 抜き取られない場合 */ if (tcb->intr_info.type == SERIAL_INTERRUPT) { getcurrent(); /* 非タスクコンテキスト用システムコール発行タスクをレディーへ */ } g_current->priority = tskpri; /* 実行状態タスクの優先度変更 */ /* 抜き取られない場合 */ if (tcb->intr_info.type == SERIAL_INTERRUPT) { putcurrent(); /* 非タスクコンテキスト用システムコール発行タスクをレディーへ */ } DEBUG_LEVEL1_OUTVLE(g_current->init.tskid, 0); DEBUG_LEVEL1_OUTMSG(" out tskid : chg_pri_isyscall_isr().\n"); DEBUG_LEVEL1_OUTVLE(g_current->priority, 0); DEBUG_LEVEL1_OUTMSG(" change priority activ : chg_pri_isyscall_isr().\n"); } /* * 優先度変更タスクが実行可能状態(レディーに存在する)の場合,実行状態タスクはレディーから抜き取られないので, * 実行可能状態タスクをレディーから抜き取り,優先度を変更して,レディーへ戻す */ else if (tcb->state & TASK_READY) { get_tsk_readyque(tcb); /* レディーキューから抜き取る関数(scheduler.cにある) */ g_current->priority = tskpri; putcurrent(); DEBUG_LEVEL1_OUTVLE(g_current->init.tskid, 0); DEBUG_LEVEL1_OUTMSG(" out tskid : chg_pri_isyscall_isr().\n"); DEBUG_LEVEL1_OUTVLE(g_current->priority, 0); DEBUG_LEVEL1_OUTMSG(" change priority ready : chg_pri_isyscall_isr().\n"); } /* * 優先度変更タスクが待ち状態(レディーに存在しない)の場合,実行状態タスクはレディーから抜き取られないので, * 待ち状態タスクの優先度を変更のみ */ else { tcb->priority = tskpri; DEBUG_LEVEL1_OUTVLE(tcb->init.tskid, 0); DEBUG_LEVEL1_OUTMSG(" out tskid : chg_pri_isyscall_isr().\n"); DEBUG_LEVEL1_OUTVLE(tcb->priority, 0); DEBUG_LEVEL1_OUTMSG(" change priority sleep : chg_pri_isyscall_isr().\n"); } }
static char* fswalk1(Fid *fid, char *name, Qid *qid) { char *q; int i, isdotdot, n, t; uvlong path; Aux *a; Whist *wh; String *s; isdotdot = strcmp(name, "..")==0; n = strtoul(name, &q, 10); path = fid->qid.path; a = fid->aux; switch(qidtype(path)){ case 0: return "wikifs: bad path in server (bug)"; case Droot: if(isdotdot){ *qid = fid->qid; return nil; } if(strcmp(name, "new")==0){ *qid = (Qid){mkqid(Fnew, 0, 0, 0), 0, 0}; return nil; } if(strcmp(name, "map")==0){ *qid = (Qid){mkqid(Fmap, 0, 0, 0), 0, 0}; return nil; } if((*q!='\0' || (wh=getcurrent(n))==nil) && (wh=getcurrentbyname(name))==nil) return "file does not exist"; *qid = (Qid){mkqid(D1st, wh->n, 0, 0), wh->doc->time, QTDIR}; a->w = wh; return nil; case D1st: if(isdotdot){ *qid = (Qid){mkqid(Droot, 0, 0, 0), 0, QTDIR}; return nil; } /* handle history directories */ if(*q == '\0'){ if((wh = gethistory(qidnum(path))) == nil) return "file does not exist"; for(i=0; i<wh->ndoc; i++) if(wh->doc[i].time == n) break; if(i==wh->ndoc){ closewhist(wh); return "file does not exist"; } closewhist(a->w); a->w = wh; a->n = i; *qid = (Qid){mkqid(D2nd, qidnum(path), i, 0), wh->doc[i].time, QTDIR}; return nil; } /* handle files other than index */ for(i=0; i<nelem(filelist); i++){ if(strcmp(name, filelist[i])==0){ if(needhist[i]){ if((wh = gethistory(qidnum(path))) == nil) return "file does not exist"; closewhist(a->w); a->w = wh; } *qid = (Qid){mkqid(F1st, qidnum(path), 0, i), a->w->doc->time, 0}; goto Gotfile; } } return "file does not exist"; case D2nd: if(isdotdot){ /* * Can't use a->w[a->ndoc-1] because that * might be a failed write rather than the real one. */ *qid = (Qid){mkqid(D1st, qidnum(path), 0, 0), 0, QTDIR}; if((wh = getcurrent(qidnum(path))) == nil) return "file does not exist"; closewhist(a->w); a->w = wh; a->n = 0; return nil; } for(i=0; i<=Qraw; i++){ if(strcmp(name, filelist[i])==0){ *qid = (Qid){mkqid(F2nd, qidnum(path), qidvers(path), i), a->w->doc->time, 0}; goto Gotfile; } } return "file does not exist"; default: return "bad programming"; } /* not reached */ Gotfile: t = qidtype(qid->path); switch(qidfile(qid->path)){ case Qindexhtml: s = tohtml(a->w, a->w->doc+a->n, t==F1st? Tpage : Toldpage); break; case Qindextxt: s = totext(a->w, a->w->doc+a->n, t==F1st? Tpage : Toldpage); break; case Qraw: s = s_copy(a->w->title); s = s_append(s, "\n"); s = doctext(s, &a->w->doc[a->n]); break; case Qhistoryhtml: s = tohtml(a->w, a->w->doc+a->n, Thistory); break; case Qhistorytxt: s = totext(a->w, a->w->doc+a->n, Thistory); break; case Qdiffhtml: s = tohtml(a->w, a->w->doc+a->n, Tdiff); break; case Qedithtml: s = tohtml(a->w, a->w->doc+a->n, Tedit); break; case Qwerrorhtml: s = tohtml(a->w, a->w->doc+a->n, Twerror); break; case Qwerrortxt: s = totext(a->w, a->w->doc+a->n, Twerror); break; case Qhttplogin: s = httplogin(); break; default: return "internal error"; } a->s = s; return nil; }