使用_ropen打开物理文件的错误

Error opening physical file with _Ropen

本文关键字:文件 错误 ropen 使用      更新时间:2023-10-16

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

因此,试图打开文件只是为了保证其在源上的存在。

这就是我的方式:

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

但是,该文件未使用pf = SPP:*NULL结果

打开

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

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

绝对路径也被尝试: '/QSYS.LIB/MYLIB.LIB/MYFILE.FILE',没有任何区别 - 相同的错误持续。

IBM IFS Explorer清楚地显示了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

有什么想法可以尝试?

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

要处理这一点,需要从呼叫者传递零终止的字节数组的参数。如果RPG解决方案看起来像'MYFILE/MYLIB' + X'00'