2015-10-18 60 views
-1

我試圖通過在Linux內核中創建自己的信號量來解決生產者消費者問題。我這樣做,通過創建一個結構sys.c:在Linux Kernel中創建我自己的數據類型。現在我該如何使用它?

struct my_sem 
{ 
    int value; 
    struct task_struct *pro[25]; 
}; 

現在,當即時通訊在我的計劃,並嘗試建立這個信號:

my_sem mutex1; 

我收到寫着「my_sem未申報的」

錯誤

我包含了unistd.h並且在gcc中用-i選項編譯。我覺得我還有其他東西缺失。

謝謝。

+1

在編寫Linux內核中的東西之前,您應該閱讀一本關於C編程的基本書。 (在Linux內核中的生產者/消費者,真的嗎?)當你在C中聲明'struct'類型時,你總是必須使用帶有*標記*名稱的關鍵字'struct'。或者你必須多做一些工作,並且爲這個名字聲明一個'typedef'。 –

+0

好吧,所以我必須聲明它是一個結構,即使它在linuex內核中? – Mike

+0

爲什麼您認爲C語言的規則會因「在Linux內核中」而改變?無論如何,我不太清楚你的意思。 –

回答

0

當你做你自己的結構,並想使用它,你不得不說:

struct my_sem mutex1; 

爲了使它看起來更好,使用的typedef:

struct my_sem 
{ 
    int value; 
    struct task_struct *pro[25]; 
}; 
typedef struct my_sem my_sem; 

第一struct my_sem是你有什麼每當你想創建一個my_sem類型的新變量時都要說。第二個my_sem是你可以用來簡化。每當你說my_sem編譯器將使用struct my_sem。現在

你的代碼

my_sem mutex1; 

作品。

+0

雖然這個答案是資料性的,但它沒有解決(每OP)struct定義只存在於內核中的事實。難道不需要有一個相關的頭文件包含這個結構體定義和一些內核中的代碼來處理這個結構體定義嗎? – user3629249

+0

請不要鼓勵這樣的問題,給予答案讓OP不知不覺地進行顯然是一個可怕的想法。 – Jeff

相關問題