stat () не работает для файлов .so - PullRequest
0 голосов
/ 15 июля 2011

У меня проблема с 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");
     ....
  }

Таким образом, ошибка появляется как статистика Нет.такой файл или каталог

Но тот же код прекрасно работает для других файлов и каталогов.libfuncs.so - моя созданная общая библиотека.

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Многие файлы ".so" на самом деле являются символическими ссылками из-за проблем с версиями. Возможно, вы захотите использовать <a href="http://linux.die.net/man/2/lstat" rel="nofollow">lstat()</a> в этих случаях, чтобы определить фактическую ссылку.

Ошибка, которую вы получаете («Нет такого файла или каталога»), по-видимому, подразумевает, что символическая ссылка указывает на то, что не существует. В этих случаях может помочь статистика самой ссылки, но, конечно, это не то, что вы хотите сделать. Проверьте цель ссылки. Если путь в ссылке относительный, возможно, вы выполняете код из другого каталога?

0 голосов
/ 15 июля 2011

Возможная причина

Я могу только догадываться, что "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<br/> N O P Q R S T U V W X Y Z26 строчных букв латинского алфавитаa b c d e f g h i j k l m<br/> n o p q r s t u v w x y z10 десятичных цифр0 1 2 3 4 5 6 7 8 9следующие 29 графических символов! " # % & ' ( ) * + , - . / :<br/> ; < = > ? [ \ ] ^ _ { | } ~

Далее:

Если ...

любые другие символы встречаются в исходном файле (кроме идентификатора, символаконстанта, строковый литерал, имя заголовка, комментарий или токен предварительной обработки, который никогда не преобразуется в токен),

угадайте, что?** барабанная дробь **

поведение не определено.

Вечеринка. но я думаю, что это первая причина.

...