Имеется 4 входа (4 трубы) и 10 выходов (10 труб).Каждый из них должен быть прочитан индивидуально и одновременно с другими.Каждый входной канал получает строки, которые идентифицируют контейнеры (это программа, которая воссоздает обработку контейнеров на складе и затем отправляет их одному из 10 пунктов назначения), эти строки также содержат серийный номер и пункт назначения.
Строкидолжны быть обработаны каждой из труб.Затем они помещаются в одну очередь (они должны оставаться там в течение 1 секунды перед обработкой).Затем они отправляются в матрицу измерения [n] [n] для ожидания от 1 до 5 секунд, после чего их направляют в одну из 10 выходных очередей в соответствии с пунктом назначения (например, «LND» для Лондона).
Для каждого контейнера в матрице создается поток, который ждет от 1 до 5 секунд, упомянутых ранее, после чего он помещается в выходные очереди.Каждая очередь имеет выделенный поток для своей обработки и ждет 2 секунды, прежде чем записать ее в один из выходных каналов.
Я не понимаю, как соединить каждую часть (поток с каналом к потоку, а затем к очередии т. д.).
Мы пробовали много разных способов соединить потоки с каналами и записать в файлы необходимую информацию, но без положительных результатов.
ПРИМЕР КОДА: (здесь мы генерируемслучайные uuids для каждого контейнера)
Код для чтения канала
#define MAX_NUM_THREADS 3
void *ler_do_pipe(void *_fd) { //Reads from the pipes
int fd;
fd = (int) _fd;
char buffer[4096];
int n;
while ((n = read(fd, buffer, 4096)) > 0) {
write(1, buffer, n);
}
}
int main() {
pthread_t threads[MAX_NUM_THREADS];
char fifo[5];
int fd, i;
for (i = 0; i < MAX_NUM_THREADS; i++) {
sprintf(fifo, "fifo%d", i);
fd = open(fifo, O_RDONLY);
pthread_create(&threads[i], NULL, ler_do_pipe, (void *)fd);
}
pthread_exit(NULL);
return 0;
}
код, который я использую для записи канала
/*writes to the respective pipe*/
void *escrever_para_pipe(void *_fd) {
int fd;
fd = (int) _fd;
while(1) {
char txt[43];
/*criamos uma string do genero "uuid,destino" totalmente random */
/*we create a string with the "serial Number,destination" all random*/
sprintf(txt,"%s,%s\n",getuuid(),getPorto());
write(fd, txt, 43);
sleep(2);
}
}
int main () {
//We create 3 threads to the 3 pipes we have
pthread_t threads[MAX_NUM_THREADS];
char fifo[5];
int fd, i;
for (i = 0; i < MAX_NUM_THREADS; i++) {
sprintf(fifo, "fifo%d", i);
mkfifo(fifo, 0666);
}
for (i = 0; i < MAX_NUM_THREADS; i++) {
sprintf(fifo, "fifo%d", i);
fd = open(fifo, O_WRONLY);
pthread_create(&threads[i], NULL, escrever_para_pipe, (void*)fd);
}
pthread_exit(NULL);
return 0;
}
Я ожидаю, что информация будет течьмежду трубами и нитями, но мы не можем соединить их.