У меня есть программа на языке Си, которая выводит некоторые данные на стандартный вывод.Я использовал printf
для этого, но мне нужно также сохранить данные в файл, поэтому я изменил его на fprintf
.Проблема в том, что при использовании fprintf данные располагаются в неправильном порядке, не имеет значения, если вывод является stdout или файлом.
if(...) {
out = fopen(param.F, "w");
} else {
out = stdout;
}
// some code here
fprintf(out, "a");
// more code
fprintf(out, "b");
....
В этом случае вывод всегда отличается.Иногда это
acb
Иногда это
cab
и т.д. ... Я пробовал различные комбинациииз setbuf и fflush, но ни один из них не помог.
РЕДАКТИРОВАТЬ: Может быть важно знать, что я использую некоторые fork()
в моей программе, но, как я упоминал ранее, нет проблем при использовании printf.
Вот мой вывод:
1: парикмахер: чеки
2: клиент 1: создан
3: клиент 1: входит
5: парикмахер: готов
6: клиент 1: готов
4: клиент 2: создан
7: парикмахер: закончен
8: парикмахер: чеки
9: клиент 2: входит
10: клиент 1: обслуживается
11: парикмахер: готов
12: клиент 2: готов
13: цирюльник: готово
14: цирюльник: чеки
15: покупатель 2: обслуживается
Заказывается по номерам.Программа имеет такую структуру:
int main() {
pid = fork();
if(pid == 0) {
// barber printfs
} else if (pid > 0) {
// customer printfs
}
}