gpt4 book ai didi

linux - stat() 系统函数在 Linux 7.6 中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:40 28 4
gpt4 key购买 nike

作为我正在修改的 Cobol 程序的一部分,需要调用 stat 函数来检索文件的详细信息。这是在 Linux 7.6 中。但是当我运行程序时,我得到了错误

加载错误:文件“stat”错误代码: 173, pc=C6, call=1, seg=0173 在驱动器/目录中找不到调用的程序文件

如果我从命令行对文件使用 stat,它会起作用并且会检索到详细信息。我不明白为什么从 cobol 调用 stat 失败。

我检查了/usr/lib 中 .so 文件中的统计信息。可以在 libc_nonshared.a 中找到 stat

还尝试在更改 stat 结构后将调用从 stat 更改为 stat64。 stat64 也会抛出同样的错误。

有没有其他人遇到过这个问题。任何向前推进的指示都会有很大帮助。

       R0001.
DISPLAY 'Program STARTED'
ACCEPT WS-FILENAME2 FROM COMMAND-LINE
MOVE 00025 TO FCD-NAME-LENGTH
MOVE x'00' TO WS-FILENAME2(FCD-NAME-LENGTH:1)
DISPLAY 'FILENAME : ' WS-FILENAME2
CALL 'stat' USING WS-FILENAME2
ST-BUF
RETURNING WS-RETURN-CODE.
DISPLAY 'STAT CALL COMPLETE'
DISPLAY 'RETURN CODE: ' WS-RETURN-CODE
IF WS-RETURN-CODE NOT = ZERO
SET GNIO-RC-ERR-DATEXT TO TRUE
GO TO R0099
END-IF.
DISPLAY 'DEVICE VALUE : ' ST-DEV-LINUX
DISPLAY 'INODE VALUE : ' ST-INO64-LINUX
DISPLAY 'ATIME : ' ST-ATIME-LINUX
DISPLAY 'CTIME : ' ST-CTIME-LINUX
DISPLAY 'MTIME : ' ST-MTIME-LINUX
DISPLAY 'SIZE64 : ' ST-SIZE64-LINUX
DISPLAY 'BLOCKS64 : ' ST-BLOCKS64-LINUX.
R0099.
EXIT.
STOP RUN.

加载错误:文件“stat”错误代码: 173, pc=C6, call=1, seg=0173 在驱动器/目录中找不到调用的程序文件

最佳答案

我能够让它运行,但只有在首先将 COBOL 中的结构拼凑在一起之后。强制静态调用后,在编译时链接到系统库中。

这是我从名为 callstat2 的程序中获得的信息:

   01 ST-STRUCT.
05 ST-DEV-LINUX PIC 9(9) COMP-5.
05 PIC X(4).
05 ST-INO64-LINUX PIC 9(9) COMP-5.
05 pic x(4).
05 ST-NLINK PIC 9(9) COMP-5.
05 PIC X(4).
05 ST-MODE PIC 9(9) COMP-5.
05 ST-UID PIC 9(9) COMP-5.
05 ST-GUID PIC 9(9) COMP-5.
05 PIC X(4).
05 ST-RDEV-LINUX PIC 9(9) COMP-5.
05 PIC X(4).
05 ST-SIZE PIC 9(9) COMP-5.
05 PIC X(4).
05 ST-BLOCKSIZE-LINUX PIC 9(9) COMP-5.
05 PIC X(4).
05 ST-BLOCKS PIC 9(9) COMP-5.
05 PIC X(4).
05 ST-ATIME-LINUX PIC 9(10) COMP-5.
05 PIC 9(10) COMP-5.
05 ST-MTIME-LINUX PIC 9(10) COMP-5.
05 PIC 9(10) COMP-5.
05 ST-CTIME-LINUX PIC 9(10) COMP-5.


CALL STATIC 'stat' USING WS-FILENAME2
ST-STRUCT
RETURNING WS-RETURN-CODE
END-CALL

使用 -L 开关编译。

cobc -x  callstat2.cob -L/usr/lib/x86_64-linux-gnu

附言。 callstat1 也能正常工作,但它使用 C 模块包装器对 stat 和 ctime 进行系统调用。

关于linux - stat() 系统函数在 Linux 7.6 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57376479/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com