标签: mainframe

如何在z/OS上的C++中使用C套接字API

我在让C套接字API在C++上正常工作时遇到问题z/OS.

虽然我包括在内sys/socket.h,但我仍然遇到编译时错误,告诉我AF_INET没有定义.

我是否遗漏了一些显而易见的事情,或者这与这样一个事实相关:继续z/OS使我的问题变得更加复杂?


更新:经过进一步调查,我发现有一个#ifdef我正在打击.z/OS除非我定义我使用的哪种"类型"套接字,否则显然不高兴:

#define _OE_SOCKETS
Run Code Online (Sandbox Code Playgroud)

现在,我个人不知道这_OE_SOCKETS实际上是什么,所以如果任何z/OS套接字程序员在那里(你们三个人),或许你可以给我一个如何运作的概述?


测试应用程序

#include <sys/socket.h>

int main()
{
    return AF_INET;
}
Run Code Online (Sandbox Code Playgroud)

编译/链接输出:

cxx -Wc,xplink -Wl,xplink -o inet_test inet.C

"./inet.C", line 5.16: CCN5274 (S) The name lookup for "AF_INET" did not find a declaration.
CCN0797(I) Compilation failed for file ./inet.C. Object file not created.
Run Code Online (Sandbox Code Playgroud)

检查sys/sockets.h确实包含了我需要的定义,据我所知,它没有被任何#ifdef语句阻止.

但我注意到它包含以下内容:

#ifdef __cplusplus
  extern "C" {
#endif
Run Code Online (Sandbox Code Playgroud)

它基本上封装了整个文件.不确定是否重要.

c c++ sockets mainframe zos

146
推荐指数
9
解决办法
1万
查看次数

C 中 char foo(|10|) 的含义是什么?

我是一位非常有经验的 C 程序员,但最近我在大型机上遇到了一些具有局部变量的代码。这是在一个简单的 C 函数中声明此变量,然后strcpystrcat两个字符串放入其中,然后尝试使用fopen.

char foo(|10|);
Run Code Online (Sandbox Code Playgroud)

这段代码很旧了。甚至可能是 K&R C 旧的。我想知道这是否是一些晦涩的编译器扩展或对没有 [] 或类似内容的键盘的适应。

有人知道这个声明是否“特殊”吗?

这是一个标准的 Z/OS 大型机。我不确定使用什么编译器。

c mainframe ebcdic zos

99
推荐指数
1
解决办法
4275
查看次数

可变阻塞格式和固定阻塞格式之间有什么区别?

我在数据文件定义文档中遇到过这些术语,这些术语是我从大型机系统获得的一些数据.

我没有在任何词汇表或谷歌搜索中找到这些术语的定义 - 只是提到它们.

任何人都可以对这些术语的确切含义有所了解吗?

cobol mainframe jcl

21
推荐指数
1
解决办法
2万
查看次数

Oracle SQL开发人员中的DB2数据库

我听说可以使用像Oracle SQL开发人员这样的客户端连接到大型机DB2数据库.我看上线了,似乎无法在SQL开发人员中找到执行此操作所需的连接器文件.任何人都可以指示我使用链接来完成这项工作吗?或者告诉我,我是否只是在寻找错误的东西.我有连接器在Oracle中使用MySQL数据库,所以我认为它与DB2数据库类似.

database oracle db2 mainframe oracle-sqldeveloper

18
推荐指数
2
解决办法
4万
查看次数

相当于ftp put和append in scp

我有一个我无法理解的遗留脚本.

该脚本是通过ftp将unix中的4个文件(2个ebcdic格式文件和2个pdf文件)传输到大型机.

ebcdic format file 1 is abc.xyz
ebcdic format file 2 is pqr.xyz
pdf file 1 is abc.pdf
pdf file 2 is pqr.pdf
mainframe file name is AM2P.BJCUN.SALCHG
Run Code Online (Sandbox Code Playgroud)

脚本中的命令语法如下:

quote site recfm=fb
put /myfiles/abc.xyz AM2P.BJCUN.SALCHG
append /myfiles/abc.pdf AM2P.BJCUN.SALCHG
append /myfiles/pqr.xyz AM2P.BJCUN.SALCHG
append /myfiles/pqr.pdf AM2P.BJCUN.SALCHG
Run Code Online (Sandbox Code Playgroud)

我希望通过SCP实现同样的目标.

有人可以告诉你在scp中ftp的put和append命令的等价物吗?

unix ftp scp mainframe file-transfer

13
推荐指数
1
解决办法
8067
查看次数

为什么大型机应用程序没有错误?

看起来老铁是坚如磐石的软件.这是为什么?是因为软件是如此成熟,所有的错误都已经解决了?或者是因为人们已经习惯了那些他们甚至不认识它们并在它们周围工作的错误?从第一天起软件规格是否完美,一旦软件编写完成,一切正常吗?我试图了解我们是如何从大型机计算日来的,现在每个人都认为只是觉得TDD现在已经成为现实.

mainframe

11
推荐指数
4
解决办法
2069
查看次数

COBOL - 对于相同的COMPUTE,从大型机到PC的不同答案

我有这个非常简单的虚拟COBOL程序,它执行一个虚拟COMPUTE并显示结果.

   ID DIVISION.
   PROGRAM-ID. DUMMYPGM.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 NUM-A PIC 9(3) VALUE 399.
   01 NUM-B PIC 9(3) VALUE 211.
   01 NUM-C PIC 9(3).
  *
   PROCEDURE DIVISION.
   MAIN.
       COMPUTE NUM-C = ((NUM-A / 100) - (NUM-B / 100)) * 100
       DISPLAY 'NUM-C IS ' NUM-C
       STOP RUN.
Run Code Online (Sandbox Code Playgroud)

当我在大型机上编译此代码(使用编译器MVS Enterprise COBOL V4.2)并执行它时,我得到"NUM-C IS 100",可能因为(399/100)被视为3而不是3.99计算(同样适用于211/100).

但是当我在PC上编译完全相同的代码(使用GnuCobol编译器)并执行它时,我得到"NUM-C IS 188".PC的答案是正确的,但我想让它的行为与大型机一样(因此,在该计算语句中失去精度而不是188而不是)... ...我该怎么做?

上述原因是此代码的一般表达式:

 COMPUTE PDISCR = (((((X(1) + DX - XBRAK) * (ABRAK(1) / 1000)) / 100)
                  + PHT(1) + DPH - PHBRAK) * …
Run Code Online (Sandbox Code Playgroud)

cobol mainframe gnucobol

10
推荐指数
1
解决办法
333
查看次数

伪对话与对话CICS编程有什么优势?

我试图理解伪对话和对话CICS编程之间的差异.每种方法的优点和缺点是什么?

cobol mainframe cics

9
推荐指数
3
解决办法
3661
查看次数

这是什么语言:PROC,VERIFY,DECLARE,SCREEN,CMS,

我必须从旧的遗留代码中找到一些逻辑.我的经理说是COBOL,我不确定.我试图在cobol教程上找到一些没有任何运气的关键字.

以下是一些代码段:

PROC(&QPROG);
VERIFY OFF PROC;DECLARE &MSG1 AS A75;
/* DON'T CALL SCREEN IF IT'S FROM  */
IF &QPROG NE 'YUITG' THEN DO;
   CALL QAAF;
   SCREEN QUERY LOADED QAAF OTW DO;
      PRINT 'SCREEN WILL NOT LOAD';
      EXIT;
  END;
END;
ON ERROR DO;PRINT &&RC;EXIT; END;

IF LENGTHB(&P_WHAT) = 4 THEN DO; &P_WHATT = SUBSTR(&P_WHAT,1,1) CAT
   ', ' CAT SUBSTR(&P_WHAT,2,1) CAT ', ' CAT SUBSTR(&P_WHAT,3,1) CAT
   ' & ' CAT SUBSTR(&P_WHAT,4,1);
END;
DECLARE &KEYWORDD_A(0) AS A1;
DECLARE &KEYWORDD_F(0) AS 99L;
&KEYWORDD_A=
(SUBSTR(&KEYWORDD,1,1),SUBSTR(&KEYWORDD,2,1),SUBSTR(&KEYWORDD,3,1), …
Run Code Online (Sandbox Code Playgroud)

programming-languages mainframe

9
推荐指数
1
解决办法
3933
查看次数

使用C#动态读取COBOL重新定义

我正在制作一个C#程序,它能够动态读取用COBOL编写的IBM HOST Copybook,并生成一个SQL表.生成表后,我可以将文件上传到我的程序中,它将读取,从IMB-37转换并将文件插入到该sql表中.到目前为止,我几乎可以处理任何事情,尽管我遇到了REDEFINES的一些问题.

例如:

           10   SOME-FIELD        PIC 9(3)      COMP-3.     SCRRB205
4117       10   SOME-OTHER-FIELD REDEFINES                  3041-17
4117              SOME-FIELD      PIC X(2).                 3041-17
Run Code Online (Sandbox Code Playgroud)

我理解在这种情况下重新定义取代了它上面的字段,虽然我不明白的是编译器如何知道它是否应该使用重新定义.我假设在这种情况下,它将是因为第一个是第二个是一个字符的数字,尽管在下面的例子中它们都使用了字符.

 05  STREET-ADDRESS.
       10  ADDRESS-LINE-1               PIC X(20).
       10  ADDRESS-LINE-2               PIC X(20).
   05  PO-BOX REDEFINES STREET-ADDRESS  PIC X(40). 
Run Code Online (Sandbox Code Playgroud)

我试图忽略重新定义,因为它总是占用相同的空间,但是在原始字段被打包并且重新定义的字段不是的情况下,我需要知道何时解压缩字段.

对此有任何帮助将是惊人的家伙!

c# cobol mainframe ebcdic

9
推荐指数
2
解决办法
2143
查看次数