Ir para conteúdo
Fórum Script Brasil

tiagokos

Membros
  • Total de itens

    8
  • Registro em

  • Última visita

Sobre tiagokos

tiagokos's Achievements

0

Reputação

  1. tiagokos

    Message Queue

    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
  2. tiagokos

    Shared Memory

    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!
  3. Ao invés de imprimir os valores 1, 2, 7, é impresso apenas 0's.
  4. 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)?
  5. 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)); } }
  6. tiagokos

    CPUID

    Preciso construir uma função que leia os 64 bits hexa da CPU, é a chamada CPUID. Alguém já teve que fazer isso ou tem alguma idéia de como fazer? Obrigado, Tiago
  7. Como faço para passar uma string (um char[100]) por parametro para uma outra função? Obrigado.
  8. 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!
×
×
  • Criar Novo...