Witam,
Piszę ponieważ mam straszny problem z opracowaniem komunikacji między procesami w unixie za pomocą fifo. Utknąłem zaraz na początku bo jakieś dziwne rzeczy dzieją się już z samą kolejką. Wklejam kawałek kody gdzie występuje błąd. Polega on na tym, że po stworzeniu kolejki wszysko się ładnie wykonuje, aż do napotkania kolejki ' close(fd) ' po czym program niespodziewanie się kończy. Może na tym kodzie tego nie widać, ale printfy po ww. instrukcji nie działają. Program się kończy, a w konsoli pokazuje się ścieżka bieżącego katalogu i znak zachęty :| ... konsola po uruchomieniu programu wygląda generalnie tak:
/...ścieżka...$ ./proces1
** PM: moj PID=2155
KOLEJKA JUZ ISTNIEJE!!
KOLEJKA 2 JUZ ISTNIEJE!!
wprowadź tekst
asdas
asdas
BUFFSIZE: 6
/...ścieżka...$
niżej kod programu
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include "proj.h"
#define FIFO1 "/fifo"
#define FIFO2 "fifo2"
int semid,semid2,shid,shid2;
int desk1,desk2,desk3,pauza_p1=0,pauza_p2=0,pauza_p3=0,pob=0,oczekujacysygnal=0;
int * mem,* mem2;
int st,stold,run=1;
int fd,f1,f2;
char wejscie;
char buffor [1024];
char buffor2 [1024];
int WielkoscBuffora;
int proces1(){
// PROCES 1 ZAPIS DANYCH DO KOLEJKI FIFO1
if(fd=open(FIFO1,O_WRONLY|0666)<0){
switch( errno) {
case EEXIST:
printf("BLAD");break;
}}
printf("wprowadź tekst\n");
while(run) {
int i=0;
scanf("%c",&wejscie);
while(wejscie!='\n')
{
buffor[i++]=wejscie;
scanf("%c",&wejscie);
}
buffor[i]='\0';
write(fd,buffor,strlen(buffor)+1);
WielkoscBuffora=(strlen(buffor)+1);
printf("\n");
printf("BUFFSIZE: %d\n",WielkoscBuffora);
break;
}
if((close(fd))<0){
switch( errno) {
case EBADF:
printf("BŁAD!!\n");break;
case EINTR:
printf("BŁĄD2!!\n");break;
case EIO:
printf("BŁĄD#!\n");break;
}}
else printf("dobra, zamnkęło się!!\n");
return 0;
}
int main() {
int i;
pid_t p[3];
int status;
printf("** PM: moj PID=%d\n",getpid());
if(f1=mkfifo(FIFO1,O_CREAT|0666)<0){
switch( errno) {
case EEXIST:
printf("KOLEJKA JUZ ISTNIEJE!!\n");break;
}}
if(f2=mkfifo(FIFO2,O_CREAT|0666)<0){
switch( errno) {
case EEXIST:
printf("KOLEJKA 2 JUZ ISTNIEJE!!\n");break;
}}
printf("%d",proces1());
return 0;
}
błagam pomóżcie, bo już drugą noc prze to nie śpie