4

Metal C の WTO 命令を使用して、"Hello World" をジョブ ログに出力しようとしています。これは、z/OS V1R10.0 Metal C Programming Guide and Reference のセクション 1.2.3.5 の例に基づいています。WTO を使用すると、0 を含むバッファまたは ASCII から EBCDIC への変換に問題があることがわかります。ジョブ ログの関連するセクションを以下に貼り付け、その後にコード、コンパイルできなかった IBM の例のコードを貼り付けました。ジョブログ

09.01.56 J0686275 IEF403I IMIJWS0G - 開始しました - TIME=09.01.56
 09.01.56 J0686275 +...0.......
 09.01.56 J0686275 - --タイミング (分)-- ----ページング カウント---
09.01.56 J0686275 -IMIJWS0G GO 00 6 .00 .00 .00 1292 0 0 0 0 0 1
 09.01.56 J0686275 IEF404I IMIJWS0G - 終了しました - TIME=09.01.56

私のコード

#含む
#含む
#含む
 int main()
 {
                                    構造体 WTO_PARM {
               符号なしの短い len;
               未署名のショート コード。
               char* テキスト;
            } wto_buff = { 4+11, 0, "こんにちは世界" };
            __asm( " WTO MF=(E,(%0)) " : : "r"(&wto_buff));

        }

IBMコード

int main() {

            構造体 WTO_PARM {
               符号なしの短い len;
               未署名のショート コード。
               文字テキスト[80]; } wto_buff = { 4+11, 0, "こんにちは世界" }; __asm( " WTO MF=(E,(%0)) " : : "r"(&wto_buff));
            0 を返します。
        }
4

4 に答える 4

3

IBM の例は (Z/os 1.9 の下で) 私にとってはうまくいきましたが、コードページを設定するためにプラグマを追加する必要がありました: 例の上に: #pragma filetag("IBM-500")文字テキスト[80]; char text[80] を char *text に変更しようとしましたが、あなたと同じ奇妙な結果が得られました。

于 2009-10-16T07:59:28.520 に答える
1

おそらく、構造体の 2 つのバージョンのメモリ内のレイアウトは同じではありませんか? 私はgccでこれを試しました:

#include <stdio.h>

struct WTO_PARM {
    unsigned short len;
    unsigned short code;
    char *text;
};

int main()
{
    struct WTO_PARM moo = { 4+11,0,"hello" };
    printf("size %zu struct %p string %p\n", sizeof(struct WTO_PARM),&moo,moo.text);
    return 0;
}

結果は次のとおりです。

size 8 struct 0x22cce0 string 0x402000

ただし、テキスト パラメーターの型を char[80] に変更すると、結果は次のように変わります。

size 84 struct 0x22cc80 string 0x22cc84

WTO 命令は、文字列がその構造体に直接パックされることを想定している可能性があります。

于 2009-06-03T14:01:09.570 に答える
0

TN3270 クライアント経由でコードを編集しますか? 問題がエミュレーターのコード ページに関連している可能性が非常に高いです。たとえば、ソースをコンパイルするには、ISPF で次の変更を行う必要があります: c x'4A' x'AD' all ([ ) および c x'5A' x'BD' (] の場合) ...

于 2013-07-29T08:16:41.017 に答える
0

IBM サンプルをコンパイルできないのはなぜですか? 私にとっては問題なく動作します。おそらく、コンパイラーのパラメーターとエラーメッセージを見せていただけませんか?

于 2009-06-04T14:39:25.580 に答える