我正面临stat()的问题。 stat()似乎不适用于.so文件。它给出了错误
No such file or directory .
为什么会这样?
根据要求,我粘贴了部分代码:
int main()
{
char str[300];
struct stat str_buf;
strcpy(str,"path/to/my/library/libfuncs.so");
if(stat(str,$str_buf)==-1)
perror("stat");
....
}
因此错误来了 stat没有这样的文件或目录
但是相同的代码适用于其他文件和目录。 libfuncs.so是我生成的共享库。
答案 0 :(得分:1)
由于版本控制问题,许多“.so”文件实际上是符号链接。在这些情况下,您可能希望使用lstat()
来统计实际链接。
你得到的错误(“没有这样的文件或目录”)似乎暗示符号链接指向不存在的东西。在这些情况下,统计链接本身有帮助,但当然这可能不是你想要做的。检查链接的目标。如果链接中的路径是相对的,也许您正在从不同的目录执行代码?
答案 1 :(得分:0)
可能的原因
我只能猜测"path/to/my/library/libfuncs.so"
并不存在。您只需输入ls "path/to/my/library/libfuncs.so"
即可测试。
我很确定
stat()执行
工作
我想这再一次解决了一个非常完善的图书馆中的“错误”。
理论上可能的原因。
您使用$
作为变量名称。这是不允许的。 C99标准对此有这样的说法:
基本源和基本执行字符集应具有以下内容 成员:拉丁字母的26个大写字母
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
拉丁字母的26个小写字母
a b c d e f g h i j k l m
n o p q r s t u v w x y z
10位十进制数字0 1 2 3 4 5 6 7 8 9
以下29个图形字符
! " # % & ' ( ) * + , - . / :
; < = > ? [ \ ] ^ _ { | } ~
此外:
如果......
猜猜是什么? ** drumroll **任何 在源文件中遇到其他字符(标识符,字符除外) 常量,字符串文字,标题名称,注释或永远不会转换为标记的预处理标记,
行为未定义。
Yay party。但我认为这是第一个原因。