初めての質問ですので、間違いはありません。 私はクライアントを実行しているときにこのエラーが発生していますが、私は "core dumpedエラー"。Linux Cプログラミング
私はエラーがどこにあるのか知っていますが、解決方法はわかりません。クライアントの
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;
}
//...
}
コードサーバからデータを受信する:
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サーバが名前付きパイプを介してクライアントにデータを送信
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;
コード: 私は2つの構造体を持っています:私はエラーが構造体レスポスタの3番目のフィールドにあると思うが、私はそれを解決する方法を知っていません
こんにちは! SOコミュニティへようこそ!すべての変数と構造体の定義を投稿してください(構造体BONECOを参照していますが、宣言は投稿していません)。また、-ggdbオプションを使用してコードをコンパイルし、gdbでコードを実行します。セグメンテーションフォルトが発生したら、コマンド "bt"を使用してここに投稿してください。がんばろう! – bukkojot
typedef struct { int humano; // pid int posXant、posYant; // posicao anterior int posX、posY; // posicao destino no ecra int num; // numJog intテンポ; // vel int remate; int equipa; }ボネコ; – Kelve
さて、私の仮定は真実であることが判明し、私は答えを作成しました。また、このプログラムは何をしますか? – bukkojot