#c #file #unix
#c #файл #unix
Вопрос:
У меня есть задание, предназначенное для имитации обновления базы данных учетных записей клиентов. Мы предназначены для использования системных вызовов низкого уровня, read
write
и lseek
для обновления двоичного файла, который должен содержать structs
unsigned
номера учетных записей и double
значения учетных записей.
У меня это работает прямо сейчас, когда я могу «инициализировать» учетную запись, если учетная запись еще не существует в двоичном файле, но моя проблема заключается в понимании того, как обновить учетную запись, если это существующая учетная запись. То есть, как я могу прочитать содержимое, double
уже находящееся в двоичном файле, в буфер, добавить (или вычесть) значение, полученное из другого текстового файла, сохраненного как double
, и перезаписать обратно в двоичный файл новое значение.
Я бы поделился некоторым кодом, который я уже написал, но, честно говоря, мой мозг не может понять, как на самом деле сохранить старое double
значение, взятое из двоичного файла, как double
которое может выполнять сложение или вычитание. Любые подсказки, руководства, пример кода были бы очень признательны!
Комментарии:
1.
read(amp;mydouble, sizeof mydouble, fd);
2. АХ! Я записывал его в массив char, а не double. Большое тебе спасибо, мой друг! @wildplasser
3. КСТАТИ: я изменил порядок аргументов. Руководство — ваш друг.
4. Обратите внимание, что вы прочитаете запись (чтобы убедиться, что у вас правильный номер учетной записи), измените данные в памяти, вернитесь к началу записи и запишите исправленные данные. Или вы создаете новую копию файла, редактируя записи перед записью в новый файл, а затем, когда вы закончите, вы предпринимаете шаги по переименованию старого файла, переименовываете новый файл и думаете об удалении старого файла.
5. Спасибо за информацию @JonathanLeffler!