#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <stdio.h>
int main() {
// Here we use A and B as parent and child, made by fork
// This allows us to pass pipe FDs
int inpipe[2];
int outpipe[2];
pipe(inpipe);
pipe(outpipe);
const int arr_len = 4;
const char buf[arr_len] = "ABD"; // Character [3] is implicit NUL
int x = fork();
if(x == -1) {
perror("Fork error");
}
if(x == 0) {
// Child
char my_buf[arr_len];
read(inpipe[0], my_buf, arr_len);
// Improve it
my_buf[2] = 'C'; // ABC looks better than ABD
// Send it back
write(outpipe[1], my_buf, arr_len);
exit(0);
}
char my_buf[4];
write(inpipe[1], buf, arr_len);
// Will lock waiting for data
read(outpipe[0], my_buf, arr_len);
// Close pipes
close(inpipe[0]);
close(inpipe[1]);
close(outpipe[0]);
close(outpipe[1]);
// Dump it
printf("%s\n", my_buf);
return 0;
}
Попробуйте запустить этот пример и увидите, что он отправляет массив между двумя процессами. Если кто-то не развивает другой, единственная проблема заключается в использовании именованных каналов (замените pipe
вызов с вызовом mkfifo
и некоторые другие изменения). Не стесняйтесь основываться на этом примере. Также обратите внимание на это:
int ifd = mypipe[0], ofd = mypipe[1]; // mypipe is got somewhere before
FILE *istream = fdopen(ifd, "r"), ostream = fdopen(ofd, "w");
// Now use any stdio functions on istream and ostream
Вам, вероятно, необходимо определить протокол, чтобы B знал, когда A отправлена, и так, что A знает, когда B выполняется отправка. Если вы отправляете массивы символов по одному символу за раз с новой линией между ними, вы можете пометить конец массива, отправив '' END \ n "'. –
Что вы пробовали? Можете ли вы [включить] (http://stackoverflow.com/help/mcve) соответствующий раздел вашего кода? –
im new in stackoverflow, я написал код в редакторе vim в оболочке, вот почему я не могу скопировать его и вставить здесь. Я снимаю экран и загружаю его здесь: http://www2.pic-upload.de/img/30808319/Untitled.png Другая программа просто читает трубку и записывает в нее расширенный массив символов – Pachamachai