我可能指針問題與fp,因爲我得到(SIGSEGV)錯誤。 但我沒有太多的C經驗,我沒有看到它。結構問題指針
我正在嘗試做什麼。我爲簡單的遊戲做服務器應用程序,我用新線程處理客戶端。我使用函數pthread_create,它有處理函數稱爲handle_client,我需要在一些參數socketdescritpor(它的工作原理)和filedescriptor寫入日誌(可能有問題)。 在我的主要我打開日誌文件,然後我把文件描述符放到我的結構,我得到handle_client函數內的結構,並在這個函數中我想取回日誌文件的文件描述符(fp
),以便能夠寫入文件。我使用fflush(fp)在每個fprintf後保存數據,我打開文件一次,然後每個客戶端應該可以寫入文件通過這個描述符,但我可能做了一些壞指針(我的意思是geting fp
in和從結構中,我的代碼中有一部分是我執行此操作的。)Thx尋求幫助。
結構
typedef struct
{
int fd;
FILE *fp; //filepointer for logs file
} my_thread_context_t;
主要
int main(int argc, char *argv[]) {
FILE * fp;
fp = fopen("Serverlog.log","w");//delete last file
fclose(fp);
fp = fopen("Serverlog.log","a+");
my_thread_context_t ctx;
//bind server
//listen
while(1) {
//accept
ctx.fp = fp;// add file pointer to structure
int check = pthread_create(&thread, NULL,handle_client,&ctx);
//other code
}
hadle_client功能
void * handle_client(void * void_context){
my_thread_context_t * context = (my_thread_context_t *) void_context;
FILE *fp; //pointer na soubor s logy
fp = context->fp;//get the filepointer for logs
//other code ..
}
您是否嘗試過在調試器中運行程序?它將幫助您查明崩潰的位置,並讓您檢查可幫助您查看可能出錯的變量。 – 2012-03-09 07:10:00
使用'gdb'或其他調試器來知道你的代碼在哪一點失敗。另外爲了隔離錯誤,首先運行可疑的代碼段而不用線程 – phoxis 2012-03-09 07:11:12
通常,它看起來奇怪的程序設計是在一個線程中打開一個文件,然後從另一個線程處理文件。我只是猜測,但取決於您的操作系統的內部工作原理,這可能是原因。嘗試從線程內部打開文件。還要注意像fopen(),fprintf()等函數不是線程安全的,所以你不能有多個使用這些線程的線程。 – Lundin 2012-03-09 07:42:21