LINUX.ORG.RU

Неименованные программные каналы


0

1

У меня вопрос по обмену данными между процессами с помощью неименованных программных каналов.

Как мне написать, чтобы передать строку?

Я пишу:

char *s,*s3;

...//создаю процессы

write(fd1[1],s, strlen(s));

...

read(fd1[0],s3, strlen(s));

Но при запуске происходит ошибка: Segmentation fault (core dumped)

В чем дело?

Ответ на: комментарий от true_admin

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>

int main(void)
{ int i, fact, fd1[2];
char *s,*s2,*s3;
pipe(fd1);
for (i=1; i<=1; i++)
{ fact = fork();
if (fact == -1) { printf(«ERROR forking\n»); }
s = «Здравствуй! ID моего родителя =»;
s2 = (char)getppid();
strcat(s,s2);
write(fd1[1],s, strlen(s)); sleep(1); }
sleep(1);
read(fd1[0],s3, strlen(s));
printf(s3);
sleep(1);
close(fd1[0]);
close(fd1[1]);
return 0;
}

alex_nder
() автор топика
Ответ на: комментарий от alex_nder

Я вот только не знаю, если я в цикле делаю, к примеру, 3 процесса, то так как я написал, у них будет обмен данными или я неправильно написал код?

alex_nder
() автор топика
Ответ на: комментарий от alex_nder

память под строки пушкин выделять будет? man malloc

да и за s2 = (char)getppid(); все, что висит отрывать нужно

ananas ★★★★★
()

На жабе небось раньше писал?

ttnl ★★★★★
()
Ответ на: комментарий от alex_nder

> s = «Здравствуй! ID моего родителя =»;

s2 = (char)getppid();


Cи это слишком сложно, может стоит обратить внимание на Python или хотя бы на PHP?

rival ★★
()
Ответ на: комментарий от alex_nder
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>

int main(void) {
  int i, fact, fd1[2];
  char s[128], s2[128];
  pipe(fd1);
  for (i = 0; i < 1; i++) {
    fact = fork();
    if (fact == -1) {
      printf("ERROR forking\n");
    }
    sprintf(s, "Здравствуй! ID моего родителя = %d", getppid());
    write(fd1[1], s, strlen(s)); sleep(1);
  }
  sleep(1);
  memset(s2, 0, 128);
  read(fd1[0], s2, strlen(s));
  puts(s2);
  sleep(1);
  close(fd1[0]);
  close(fd1[1]);
  return 0;
}

На си не пишу, так что сильно не пинайте. Во всяком случае, не падает.

rival ★★
()
Ответ на: комментарий от alex_nder

С тебя $500. Пожертвуй их какого-нибудь приюту^Wопенсорс проекту, когда появятся лишние деньги.

rival ★★
()
Ответ на: комментарий от true_admin

>Нихера се ты кастанул. Я бы не догадался.

это путь самурая

Corey
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.