2010-10-21 54 views
2

的第一篇文章,所以要很好;)是否可以將FILE *存儲在用戶定義的結構中?這裏

是否有可能來存儲文件*在一個結構,我認爲沒有理由不,但下面的代碼不會編譯,我似乎無法存儲參考到文件指針。

typedef struct fileType 
{ 
    FILE * file; 
    char fileName[MAX_FILENAME_LEN]; 
    unsigned linesRead; 
    unsigned nextBufLine;   /* next line to be inserted/removed in the buffer */ 
    pthread_mutex_t * mtxFile;  /* mutex controlling access to this file */ 
}FileType; 

我的編譯器似乎不認識的類型「文件」在該行拋出這個錯誤,當然,我已經包含在頭文件stdio.h

error: expected specifier-qualifier-list before '(' token

基本上我編寫一個產生一系列子進程的程序,輪流從文件中讀取行並將它們插入到循環緩衝區中,在那裏它們被另一組子進程讀取,加密並寫入到一個新文件中(line by線)。這是父級打開和關閉文件的要求。

我允許使用全局變量的這一點,但要儘可能地避免它,感謝您的答覆。 =]

+3

因此...您可以使用FILE *外界說的結構?(是的,有*是*一個原因詢問。) – 2010-10-21 02:03:15

+0

剛剛試過,也沒有我不能,不能相信我沒有嘗試,第一。這麼清楚結構也沒什麼用這個概率來做... – 2010-10-21 02:20:01

回答

3

你有一個宏是否在重新定義文件或文件?

+0

不,我沒有,是有可能,我已經包括了一些其他圖書館已經重新定義了它? – 2010-10-21 02:12:01

+0

可能 - 嘗試將代碼與代碼所包含的任何其他頭文件(無論是在您定義此類型的頭文件還是包含此頭文件的cpp文件中)隔離開來。 – 2010-10-21 02:14:02

+0

原來「我沒有」有宏重新定義文件中,包括來自另一個文件,在事後考慮 預期字符串常量<前說明符限定符列表,而愚蠢的 - 字符串常量???? =/ 歡呼的幫助,這裏的好社區。 – 2010-10-21 02:32:44

2

如果包含<stdio.h>它應該是罰款,在你的結構一個FILE *成員。

1

什麼數據類型是什麼呢? char,int ...

unsigned linesRead; 
unsigned nextBufLine; 
+3

指定沒有數據類型的unsigned,默認爲int:http:/ /stackoverflow.com/questions/2099830/unsigned-keyword-in-c – 2010-10-21 02:05:53

+0

正確,但這被認爲是不好的做法? – 2010-10-21 02:12:49

+1

對於大多數人來說,通常最好的辦法就是最明顯的,因爲當其他人閱讀代碼時 - 是的,我會明確地使用'unsigned int'代替。 – 2010-10-21 02:15:31

2

在結構中存儲FILE*並沒有任何問題,並且假設錯誤消息提到'('我懷疑問題可能存在於代碼的其他部分中(因爲沒有如果你發佈了更多的代碼,我們可能會幫助你更好。鑑於你在那裏我唯一的另一個想法是,你錯過了包括pthread_mutex_t

相關問題