Tôi có thực hiện hai chương trình một trong số họ được đặt tên máy phát điện mà in một số văn bản mỗi giâyc stdout để stdin thời gian thực
int main(int argc, char** argv) {
for(int i = 0; i < 10 ; i++) {
printf("something\n");
sleep(1);
}
return (EXIT_SUCCESS);
}
sau đó một có một chương trình thứ hai gọi nó là người tiêu dùng bây giờ, mà phải đọc từ một đầu vào standart thêm vào nó một số văn bản khác và in lại nó. Hãy cho nó trông như thế này:
int main(int argc, char** argv) {
char line[BUFSIZ];
while(scanf("%s",line) != -1){
printf("you entered %s \n",line);
}
return (EXIT_SUCCESS);
}
khi tôi biên dịch chúng và cố gắng chỉ chạy một máy phát điện như ./generator nó hoạt động như tôi mong đợi. mỗi thứ hai một cái gì đó là in để điều khiển. nhưng khi tôi cố gắng chạy cả hai như ./generator | ./consumer nó không hoạt động như tôi mong đợi. Tôi chờ 10 giây và sau đó nhận được 10 dòng bạn đã nhập một cái gì đó tôi muốn in "bạn đã nhập thứ gì đó" mỗi giây.
Bạn có thể giải thích cho tôi lý do tại sao điều này là như vậy hay thậm chí tốt hơn là tel cho tôi cách đạt được hành vi mong đợi?
Hoặc bạn có thể tắt đệm trên dòng lệnh sử dụng stdbuf -o0 ./generator | ./ consumer –
@RomanHocke Chờ đợi có tồn tại một chương trình thay đổi hành vi chế độ người dùng cho một quá trình trước exec khác? Thật thú vị ... –