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