Es ist das erste Mal, dass ich hier eine Frage mache, also hoffe ich, keine Fehler zu machen ... Ich mache einen Server-Client-Programm und ich habe diesen Fehler, wenn ich Client ausführen, habe ich "Core Dump Error".Linux C Programmierung
Ich denke, ich weiß, wo ist der Fehler, aber ich weiß nicht, wie man es löst. Ich habe 2 structs:
typedef struct {
int pid;
int cmd; //1 -login,2-registrar,3-tecla
char login[100];
char pw[100];
int tecla;
} PEDIDO;
typedef struct {
int cmd;
int res;
BONECO *b;
} RESPOSTA;
-Code, wenn der Server Daten an den Client über eine Named Pipe sendet:
int main(int argc, char *argv[], char *envp[]){
//...
i = read(fd, &p, sizeof (p));
printf(">>> Li %d bytes\n", i);
printf("User : %s PID : %d\n", p.login, p.pid);
if (p.cmd == 1) { //LOGIN
char user_fd[100], pw_fd[100];
FILE *f = fopen(argv[1], "r");
if (!f) {
printf("Erro ao abrir ficheiro\n");
exit(0);
}
while ((fscanf(f, "%s %s ", user_fd, pw_fd))) {
if (strcmp(p.login, user_fd) == 0 && strcmp(p.pw,pw_fd) == 0) {
printf("\nLOGIN CORRECTO!!!\n");
for (i = 0; i < 20; i++) {
if (clientes[i][0] != p.pid && clientes[i][0] == -1) {
clientes[i][0] = p.pid;
break;
}
}
sprintf(cli_fifo, "ccc%d", p.pid);
fd_resp = open(cli_fifo, O_WRONLY);
r.cmd = 1;
r.res = 1;
i = write(fd_resp, &r, sizeof (r));
close(fd_resp);
fclose(f);
break;
}
//...
}
Code of Client zum Empfangen von Daten vom Server:
void *recebe_msg(void *dados) {
int i;
sprintf(cli_fifo, "ccc%d", getpid());
mkfifo(cli_fifo, 0600);
fd_resp = open(cli_fifo, O_RDWR);
menu();
do {
i = read(fd_resp, &r, sizeof (r));
if (ESTADO == 0) {
if (r.cmd == 1 && r.res == 1) { // OK
ESTADO = 1;
wclear(win);
mvwprintw(win, 10, 14, "Login efectuado com sucesso!");
wprintw(win, "BONECO %d, %d , %d , %d ",r.b[0].num,r.b[0].humano,r.b[0].remate,r.b[0].tempo);
wrefresh(win);
sleep(3);
desenha_campo();
}
if (r.cmd == 1 && r.res == 0) { // NOK
wclear(win);
mvwprintw(win, 10, 14, "Senha e/ou login incorrectos!!!");
wrefresh(win);
sleep(3);
menu();
}
if (r.cmd == 2 && r.res == 0) {
wclear(win);
mvwprintw(win, 10, 14, "Login já está em uso!");
wrefresh(win);
sleep(3);
menu();
}
if (r.cmd == 2 && r.res == 1) {
wclear(win);
mvwprintw(win, 10, 14, "Registo efectuado com sucesso!");
wrefresh(win);
sleep(3);
menu();
}
if (r.cmd == 9) { // sair
FIM = 1;
}
} else if (ESTADO == 1 || ESTADO == 2) {
wclear(win3);
scrollok(win3, TRUE);
keypad(win3, TRUE);
noecho();
if (r.cmd == 3) { // actualizacao de jogadores
desenha_campo();
desenha_jogadores();
} else if (r.cmd == 9) { // sair
FIM = 1;
}
}
} while (!FIM);
close(fd_resp);
unlink(cli_fifo);
pthread_exit(0);
}
OBS: Ich denke, der Fehler ist auf dem 3. Feld der Struktur RESPOSTA, aber ich weiß nicht, wie man es löst
Hallo! Willkommen in der SO Community! Bitte posten Sie die Definition jeder Variablen und Struktur (Sie verweisen auf die Struktur BONECO, aber nicht auf ihre Deklaration). Kompilieren Sie Ihren Code mit der Option -ggdb und führen Sie dann Ihren Code unter gdb aus. Wenn Sie einen Segmentierungsfehler haben, verwenden Sie den Befehl "bt" und posten Sie ihn hier. Viel Glück! – bukkojot
typedef struct { int humano; // pid int posXant, posYant; // posicao anterior int posX, posY; // posicao destino no ecra int num; // numJog int Tempo; // vel int remate; int equipa; } BONECO; – Kelve
Okay, meine Annahme stellte sich als wahr heraus, ich habe eine Antwort erstellt. Auch, was dieses Programm tun wird? – bukkojot