Неверная ссылка на память (конвейер) - PullRequest
0 голосов
/ 08 мая 2018

У меня проблема с моей программой, и мне действительно нужно быстро с ней справиться. Вы можете мне помочь ? Я получаю сообщение об ошибке «Недействительная ссылка на память (SIGSEGV)» и не знаю, как это исправить. Я пробовал несколько вещей, но все равно получаю то же сообщение ... Буду признателен за любую помощь.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>

void producent(int *filedes)
{
    char *bufor; 
    FILE *p; 
    close (filedes[0]);
    srand( time( NULL ));

    bufor=(char*)malloc(256);
    p=fopen("producent.txt", "e");

    while (p!=NULL)
    {
      printf("producent:\n");
      printf("%s\n", bufor);
    if (write(filedes[1],bufor, 256)==-1)
        {
        perror("Blad funkcji write\n");
        exit(1);
    }
    sleep(rand);
    }
    fclose(p);
    close (filedes[1]);
    free(bufor);
    wait(NULL);
  }

  void konsument (int *filedes)
  {
    char *bufor;
    FILE *k; 
    close (filedes[1]);
    srand(time( NULL ));

    bufor=(char*)malloc(256);
    k=fopen("konsument.txt", "s");

    while (read(filedes[0],bufor,256)>0)
    {
      printf("konsument:\n");
      printf("%s\n",bufor );
      fputs(bufor,k);
      sleep(rand);
    }
    fclose(k);
    close(filedes[1]);
    free(bufor);
  }

  int main()
  {
    int filedes[2];
    switch (fork())
    {
      case -1:
        perror("Bląd funkcji fork\n");
        exit(1);
        break;
      case 0:
        konsument(filedes);
        break;
      default:
        producent(filedes);
        break;
    }
    return 0;
  }

Спасибо за любую помощь!

...