首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从COBOL调用C: stderr的问题

从COBOL调用C: stderr的问题
EN

Stack Overflow用户
提问于 2013-01-28 10:08:26
回答 3查看 577关注 0票数 0

从我的COBOL程序中,我调用我的C模块,它本身调用一个专有库。这个库坚持要写入stderr,尽管没有可用的stderr,因为主程序是用COBOL编写的。因此,该程序以下列消息中止:

代码语言:javascript
复制
cannnot open stderr

惠普的支持人员建议我发布

代码语言:javascript
复制
PARAM SAVE-ENVIRONMENT ON

在运行程序之前。这确实解决了我的问题。但是,我的程序将被多个脚本中的人使用,我不想强迫他们在运行程序之前发布PARAM SAVE-ENVIRONMENT ON

是否有一些COBOL85指令,允许我在不手动更改任何参数的情况下正确运行程序?有点像

代码语言:javascript
复制
?PARAM SAVE-ENVIRONMENT ON

会很棒的..。

编辑:

因为我能够修改C模块(而不是库),所以我会完全满足于基于C的解决方案。但是,在调用库之前简单地打开stderr并不能解决我的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-28 15:45:54

PARAM SAVE-ENVIRONMENT ON使HP程序保存环境变量(它们在卫报启动时作为消息接收),以便将来从C模块调用getenv()

实际上,我使用的库试图打开stderr,因为它不能读取环境变量。一种解决方案是将PARAM SAVE-ENVIRONMENT设置为ON,这样getenv()将再次正常工作。这必须在每个环节中进行。

除非:您在COBOL程序中使用?SAVE STARTUP-或?SAVE ALL-directive来达到同样的效果。

汲取的经验教训:

  • 不要混合COBOL和C。
  • 完全不要使用COBOL。
票数 0
EN

Stack Overflow用户

发布于 2013-01-28 11:25:50

如果您可以从Cobol执行TACL命令,就可以执行。

您能在Cobol中打开一个对stderr的解析文件吗?也许,准确地发现PARAM所保存的环境所做的事情也会有所帮助。

大多数C贡献者都不会知道惠普/串列上的操作系统,这将影响答案的价值。我不知道你是否可以从你的C程序“外壳”发出一个TACL命令或运行一个TACL脚本。

使用Cobol、TACL和C手册对惠普/串联系统进行一些研究,可能会让你找到答案,或许还有一两个谷歌。

在他们的脚本中包含这个语句有什么问题?如果他们想让这个计划成功的话?

票数 1
EN

Stack Overflow用户

发布于 2013-01-28 17:32:17

我不是惠普的NonStop开发人员,我有一些问题。stderr是C. File channel 2中的一个特殊符号(0标准in,1标准out,2标准错误),但这些都是低级信道号。stderr是指向文件结构的默认指针。回到GNU/Linux,/usr/include/stdio.h将它们定义为

代码语言:javascript
复制
/* Standard streams.  */
extern struct _IO_FILE *stdin;          /* Standard input stream.  */
extern struct _IO_FILE *stdout;         /* Standard output stream.  */
extern struct _IO_FILE *stderr;         /* Standard error output stream.  */
/* C89/C99 say they're macros.  Make them happy.  */
#define stdin stdin
#define stdout stdout
#define stderr stderr

打开一个名为"stderr“的文件不是一回事。创建的任何进程都应该已经打开0、1和2。应该不重要的是,什么编程语言是用于main。惠普NonStop和其他POSIX-ey系统有那么大的不同吗?stderr (文件指针)通常对任何包含stdio.h的代码都是全局的。

顺便说一句,来自一个OpenCOBOL和GNU/Linux爱好者:关于您对经验教训的其他评论,

  • 请混合COBOL和C(以及Fortran、Ada、Vala、Python、Java和.)
  • 使用COBOL
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14559666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档