2011-07-15 20 views
-2

我正面臨stat()的問題。 stat()似乎不能與.so文件一起使用。它給出了錯誤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

你能舉一個你如何使用它的例子嗎? –

+0

@Oli ...已添加部分代碼 – Chung

+2

@Chung:不要使用'$'作爲名稱,它不是C標準的一部分。此外,無論何時您在已建立的庫中感受到錯誤,並且glibc是已建立的庫,則假定_you_做錯了。 –

回答

1

由於版本問題,許多「.so」文件實際上是符號鏈接。在這些情況下,您可能需要使用lstat()來統計實際的鏈接。

你得到的錯誤(「沒有這樣的文件或目錄」)似乎暗示符號鏈接指向不存在的東西。在這些情況下,鏈接本身是有幫助的,但當然這可能不是你想要做的。檢查鏈接的目標。如果鏈接中的路徑是相對的,也許你正在執行不同目錄中的代碼?

+0

'stat'也適用於符號鏈接。 'lstat'將鏈接解除引用。 – cnicutar

+0

@cnicutar:當然,但如果目標文件不存在,它可能會失敗。這可能是OP正在經歷的。 – unwind

+0

噢,我明白了:-)。上面的錯誤:解除引用沒有。 – cnicutar

0

可能的原因

我只能猜測,"path/to/my/library/libfuncs.so"實際上並不存在。只需輸入ls "path/to/my/library/libfuncs.so"即可測試。

我敢肯定,

統計()不工作

我想這再次解決了一個非常完善的庫中的「錯誤」。


Theoratically可能的原因。

您使用$作爲變量名稱。這是不允許的。 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個圖形字符
! " # % & ' () * + , - ./:
; < = > ? [ \ ]^_ { | } ~

另外:

如果...

任何 其他字符在一個源文件中遇到的(除了在一個標識符,一個字符 恆定,字符串文字,一個標題名稱,註釋,或永遠不會轉換成令牌的預處理標記) ,

猜怎麼着? **鼓滾動**

行爲是未定義的。

Yay派對。 但我認爲這是第一個原因。

相關問題