c — Запись файла не по порядку в переполнении стека

Вот супер простой пример моей проблемы. Ожидается, что код создаст 1000 файлов с именами от file1 до file1000 соответственно, и в каждом файле числа от 1 до 1000000000 должны появляться в порядке возрастания, по одному на строку при просмотре файла.

<?php
for ($filenum=1;$filenum<=1000;$filenum++){
$handle=fopen("file".$filenum,"w");
for ($num=1;$num<=1000000000;$num++){
fwrite($handle,$num."\n");
}
fclose($handle);
}
?>

После выполнения первый файл file0001 создается правильно. Второй файл, однако, содержит числа, которые не в порядке. Я полагаю, что это потому, что fwrite отправляет строку для записи в специальный буфер, который будет записан позже?

Я хочу, чтобы данные были записаны немедленно. Мне все равно, если для правильной записи файлов требуются дополнительные десять минут, и я готов использовать лучшие функции вместо fopen () fwrite () и fclose (). Я верю в C, есть системная функция OPEN, которая используется для создания файла без буферизации, и это больше, чем я хочу.

Может кто-нибудь посоветовать мне, как лучше использовать функции? или мне придется прибегнуть к созданию собственной функции, включающей циклы, пока функция fwrite () не запишет все данные и не будет молиться за блокировку системы?

1

Решение

Если вы не хотите буферизировать, используйте fflush каждый раз, когда вы используете fwrite.
http://php.net/manual/en/function.fflush.php

тем не мение fwrite Функция должна работать для вашего варианта использования, даже если она буферизует данные. Буфер упорядочен.

Я рекомендую вам проверить возвращаемое значение функции. Рекомендуется всегда проверять его на функции, связанные с IO. fwrite функция возвращает false, если это не удалось. Документ ниже объясняет другие случаи в деталях. Примером является случай, когда ваша файловая система заполнена.

http://php.net/manual/en/function.fwrite.php

Согласно комментарию на этой странице, fwrite также возвращает ноль при сбоях.

1

Другие решения

Других решений пока нет …