使用_Ropen

时间:2018-02-13 14:01:56

标签: c++ db2 ibm-midrange db2-400 ibm-ifs

我试图将物理文件放在IFS上。

所以试图打开文件只是为了保证它在源头上的存在。

我就是这样做的:

errno=0;                                                          
if ( ((pf = _Ropen(pfname, "rr, nullcap=Y")) == NULL) || (errno!=0) )
{
   printf("\nError:  Cannot open file %s\n",pfname);
   //...
}

但是,文件未以pf = SPP:*NULL结果

打开

这不是问题所在,但我也无法查看errnoeval errno给出Syntax error occurred.,但不知道发生了什么。

我仍然可以查看pfname的内容:它看起来像'MYLIB/MYFILE'

还尝试了绝对路径: '/QSYS.LIB/MYLIB.LIB/MYFILE.FILE',没有任何差异 - 同样的错误仍然存​​在。

IBM IFS资源管​​理器清楚地显示了MYLIB的内容,并且此lib中有一个MYFILE

UPD

我添加了一些调试日志记录,仅用于取消错误描述或错误代码:

numbytes = sprintf( (char *)NULL, "%s", strerror(errno) );

ret = (char *)malloc( ( numbytes + 1 ) * sizeof( char ) );

sprintf( ret, "%s", strerror(errno) );     

ret的结果是SPP:*NULL

要尝试的任何想法吗?

1 个答案:

答案 0 :(得分:1)

事实证明它非常简单 - 缺少空字节,因此_Ropen无法真正访问文件,因此也不会传递错误。

要处理这个问题,需要从调用者传递以null结尾的字节数组的参数。 如果rpg解决方案看起来像'MYFILE/MYLIB' + X'00'