У меня, вероятно, проблема с указателем с fp, потому что я получаю (SIGSEGV) ошибку.
Но я не очень опытен в Си и не вижу этого.
Что я пытаюсь сделать. Я делаю Серверное приложение для простой игры, я обрабатываю клиентов в новых темах. Я использую функцию pthread_create, она имеет функцию handle с именем handle_client, мне нужно получить в некоторых аргументах socketdescritpor (это работает) и файловый дескриптор для записи журналов (возможно, есть проблема).
В моем основном я открываю файл журнала, затем помещаю filedescriptor в мою структуру, я получаю структуру внутри функции handle_client, и в этой функции я хочу получить обратно файловый дескриптор (fp
) файла журнала, чтобы умеет писать в файл. Я использую fflush (fp) для сохранения данных после каждого fprintf, открываю файл один раз, и тогда каждый клиент должен иметь возможность записи в файл через этот дескриптор, но я, вероятно, сделал что-то плохое с указателями (я имею в виду получение fp
внутри и снаружи структуры есть часть моего кода, где я делаю это действие. Спасибо за помощь.
1007 * структура *
typedef struct
{
int fd;
FILE *fp; //filepointer for logs file
} my_thread_context_t;
1010 * Основной *
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 ..
}