tiagokos
Membros-
Total de itens
8 -
Registro em
-
Última visita
Sobre tiagokos
tiagokos's Achievements
0
Reputação
-
Opa, tenho uma dúvida quanto ao Message Queue, como faço para me comunicar com os processos filhos em um mesmo código? Tenho que abrir as MQ denovo a cada processo? Segue meu email, em ingles, já que perguntei em mais de um forum. Obrigadão!!! --- Hey all, I'm having some troubles using Message Queue, could you please help me? I have to send a Message from the root process to it's children after inserting a char (if char == number, send to child 1, if char == letter, send to child 2). I'm not getting the buffer back in the children process, what am i doing wrong? #include <sys/shm.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #include <errno.h> #include <mqueue.h> int main() { int pid1; int pid2; mqd_t mq; struct mq_attr attr; char buffer; attr.mq_flags = 0; attr.mq_maxmsg = 1; attr.mq_msgsize = 1024; attr.mq_curmsgs = 0; pid1 = fork(); if (pid1 == 0) { mq = mq_open("/test_queue", O_CREAT | O_RDONLY, 0644, &attr); while(mq_receive(mq, &buffer, 1024, NULL) != 1024); if ((char)*buffer >= 'A' && (char)*buffer <= 'z') { printf("1 - %c\n", toupper((char)*buffer)); } } else if (pid1 > 0) { pid2 = fork(); if (pid2 == 0 && pid1 > 0) { mq = mq_open("/test_queue", O_CREAT | O_RDONLY, 0644, &attr); while(mq_receive(mq, &buffer, 1024, NULL) != 1024); if(isdigit((char)*buffer)) { printf("2 - %c\n", (char)*buffer); } } else if (pid2 > 0) { mq = mq_open("/test_queue", O_WRONLY); printf("Inform a char:\n"); scanf("%c", &buffer); if (isdigit((char)*buffer)) { //SEND TO CHILD 1 mq_send(mq, &buffer, 1024, 0); } else if ((char)*buffer >= 'A' && (char)*buffer <= 'z') { //SEND TO CHILD 2 mq_send(mq, &buffer, 1024, 0); } else { printf("Ignored.\n"); exit(0); } } else { printf("Err.\n"); } } else { printf("Err.\n"); } wait(); mq_close(mq); mq_unlink("/test_queue"); return 0; } Thanks very much, Tiago
-
Opa, tudo bom? Meu problema é o seguinte, tenho que fornecer um char para o meu processo pai, se for string manda para o filho 1 e o processo filho processo 1 imprime na tela, se for número manda para o processo filho 2 e o processo filho 2 imprime na tela. Tudo isso usando Shared Memory. Poderiam me ajudar, onde estou errando? #include <sys/shm.h> #include <stdio.h> #include <stdlib.h> int main() { int pid1; int pid2; char caracter; char *memoria; int shmid; char *ponteiro; shmid = shmget(IPC_PRIVATE, sizeof(int), IPC_CREAT|0666); memoria = shmat(shmid, 0, 0); pid1 = fork(); if (pid1 == 0) { ponteiro = (char *)memoria; if(ponteiro >= 'A' && ponteiro <= 'z') { printf("1 - %d\n", toupper((char *)ponteiro)); } } else if (pid1 > 0) { pid2 = fork(); if (pid2 == 0) { ponteiro = (char *)memoria; if(ponteiro >= '0' && ponteiro <= '9') { printf("2 - %s\n", ponteiro); } } else if (pid2 > 0) { printf("Informe um caracter:\n"); scanf("%c", &caracter); if (caracter >= '0' && caracter <= '9') { printf("É número!\n"); ponteiro = (char *)memoria; *ponteiro = caracter; strcpy(memoria, ponteiro); } else if (caracter >= 'A' && caracter <= 'z') { printf("É string!\n"); ponteiro = (char *)memoria; *ponteiro = caracter; strcpy(memoria, ponteiro); } else { printf("Ignorado.\n"); } } else { printf("Erro de processo.\n"); } } else { printf("Erro de processo.\n"); } wait(); return 0; } Obrigado!
-
Ao invés de imprimir os valores 1, 2, 7, é impresso apenas 0's.
-
Consegui usando: printf("%X\n", *(char *)(first + i)); Mas quando tento usar valores INT int var = 127; dump(&var, &var+1); Porque não posso usar *(int *)(first + i)?
-
Gostaria de saber como faço para mostrar o valor de um endereço em hexadecimal. (No meu exemplo eu mostro primeiro o endereço do campo e depois mostro o valor do campo em hexa...) Por exemplo: char var[] = "BLABLABLA"; dump(var, var+strlen(var)); ... void dump(void *first, void *last) { int i; for (i = 0; i < last - first; i++) { //Endereço printf("%p\n", first + i); //Dados printf("Dados:%x\n", &(first + i)); } }
-
Como faço para passar uma string (um char[100]) por parametro para uma outra função? Obrigado.
-
Olá, tenho um arquivo texto com várias linhas neste formato: 12:00:00 TAM_3501 2100 420 60 2400 Preciso transformar ele em uma estrutura do tipo: struct horario { int hora; int minuto; int segundo; }; struct voo { struct horario chegada; char nome; int altura; int velocidade; int distancia; int gasolina; }; typedef struct voo flight; Qual o algoritmo para transformar um arquivo texto em vários campos de uma estrutura? O problema é que podem aparecer frases diferentes, algo do tipo: 12:07:50 GOL_1911 Forced Landing: medical assistance required Então tem que cuidar qual estrutura vou usar, se a primeira ou uma estrutura de mensagem (que ainda será criada). Obrigado!