Всем привет.
Помогите, пжл, с вызовом select - у меня есть в директории два файла созданных с помощью mkfifo - in1 и in2. И я пишу в них с помощью echo
echo "hi"> in1
хочу чтобы можно было одновременно писать что-то в эти файлы и читать из них.
Делаю
echo "hey"> in1
и вижу
Descriptor f1 = 3
Descriptor f2 = 4
temp = 56
temp = 53
temp = 73
send f1 = 3
Descriptor f1 = 5
Descriptor f2 = 6
temp = 56
temp = 53
temp = 73
send f1 = 5
И не понимаю - почему информация дублируется?!
Почему написано два раза send f1 = 3 и send f1 = 5 - понять не могу - я ж один раз всего записала.
Вот код
void read_and_calc(int fd) {
char buf[100];
int bytes = read(fd, buf, 100);
int temp = 0;
int i;
for(i = 0; i < strlen(buf) - 1; i++) {
int temp = buf[i] - '0';
sum += temp;
printf("temp = %d \n", temp);
}
buf[bytes] = 0;
}
while(1) {
int f1 = open("./in1", O_NONBLOCK | O_RDONLY);
int f2 = open("./in2", O_NONBLOCK | O_RDONLY);
if(!(f1 && f2)) {
printf("%d\n", sum);
return 0;
}
FD_ZERO(&read_set);
FD_SET(f1, &read_set);
FD_SET(f2, &read_set);
int pipe_num = select(f2 + 1, &read_set, NULL, NULL, NULL);
if(pipe_num > 0){
if (FD_ISSET (f1, &read_set)){
read_and_calc(f1);
printf("send f1 = %d\n", f1);
}
else if (FD_ISSET (f2, &read_set)){
read_and_calc(f2);
printf("send f2 = %d\n", f2);
}
}
}
всем спасибо.