stat()不适用于.so文件

时间:2011-07-15 12:32:23

标签: c linux stat

我正面临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是我生成的共享库。

2 个答案:

答案 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。但我认为这是第一个原因。