AS400: 对象属性Domain和State
生活随笔
收集整理的這篇文章主要介紹了
AS400: 对象属性Domain和State
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在AS400(IBM i)操作系統(tǒng)中,每個對象都有Domain和State兩個屬性。有時候這兩個屬性不對,程序就會一些看似莫名其妙的問題。 Domain: 有兩個系統(tǒng)值可以設(shè)置: *SYSTEM 和 *USER。 如果程序需要訪問系統(tǒng)域的對象,那么這個程序的狀態(tài)很重要,必須是 *SYSTEM 狀態(tài)或者 *INHERENT 狀態(tài)而又被一個 *SYSTEM 狀態(tài)的程序調(diào)用。 State: 有三個系統(tǒng)值可以設(shè)置:*SYSTEM, *USER 和 *INHERENT。*USRE 狀態(tài)的的程序只能訪問 *USER 域的對象。 查看對象的Domain值和State值: 對于program,使用DSPPGM; 對于service program, 使用DSPSRVPGM. 如下圖所示: 通過CL命令CHGOBJDMN可以修改一個對象的Domain和State值。 那么如果我們自己編寫一個程序想調(diào)用系統(tǒng)提供的service program中定義的API,怎么辦呢? 假如我寫的程序叫做test.c, 要調(diào)用的service program是QSYS/QMYSRVPGM, 其Domain為*SYSTEM。 1. 在自己的程序中使用extern聲明要調(diào)用的API。這里要注意這個API是C命名還是C++命名。 2. 編譯Module: CRTCPPMOD MODULE(TESTLIB/TEST) SRCSTMF('/home/test.c') DBGVIEW(*ALL) 3. 創(chuàng)建Program: CRTPGM PGM(TESTLIB/TEST) MODULE(TESTLIB/TEST) BNDSRVPGM((QSYS/QMYSRVPGM)) 這個時候我們的program TEST的狀態(tài)為*USER, 不能夠調(diào)用*SYSTEM狀態(tài)的QMYSRVPGM中的API. 直接運行TEST會出錯。 4. 改變program 的State值:CHGOBJDMN OBJ(TESTLIB/TEST) OBJTYPE(*PMG) OBJDMN(*SAME) RUNDMN(*SYS) 這個時候出錯了,這個program中有一個Module,Module也是有狀態(tài)的,需要改變Module的狀態(tài)。 5. CHGOBJDMN OBJ(TESTLIB/TEST) OBJTYPE(*MODULE) OBJDMN(*SAME) RUNDMN(*SYS) 還需要用這個Module更新program 6. updpgm2 testlib/test testlib/test 這個時候program的狀態(tài)也變成了*SYSTEM,可以調(diào)用service program中的API了。
轉(zhuǎn)載于:https://blog.51cto.com/lishengli/196381
總結(jié)
以上是生活随笔為你收集整理的AS400: 对象属性Domain和State的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [原]JS ajax类的三种封装形式及简
- 下一篇: 限制部分Postfix用户只能内部收发的