Как читать и писать из файла.dat в Verifiedone
Я хочу прочитать и написать текстовый файл или файл.dat в verifyone для хранения данных на нем. Как я могу это сделать? вот мой код
int main()
{
char buf [255];
FILE *tst;
int dsply = open(DEV_CONSOLE , 0);
tst = fopen("test.txt","r+");
fputs("this text should write in file.",tst);
fgets(buf,30,tst);
write(dsply,buf,strlen(buf));
return 0;
}
1 ответ
Глава 3 "Руководства для программистов для Vx Solutions" ("23230_Verix_V_Operating_System_Programmers_Manual.pdf") посвящена управлению файлами и содержит все функции, которые я обычно использую при работе с файлами данных на терминале. Прочтите это, и я думаю, вы найдете все, что вам нужно.
Для начала вы захотите использовать open()
вместе с флагами, которые вы хотите
O_RDONLY
(только чтение)O_WRONLY
(только запись)O_RDWR
(прочти и напиши)O_APPEND
(Открывается с указателем положения файла в конце файла)O_CREAT
(создайте файл, если он еще не существует),O_TRUNC
(обрезать / удалить предыдущее содержимое, если файл уже существует),O_EXCL
(Возвращает значение ошибки, если файл уже существует)
В случае успеха open вернет положительное целое число - дескриптор, который можно использовать для последующего доступа к файлу. При неудаче возвращает -1;
Когда файл открыт, вы можете использовать read()
а также write()
манипулировать содержимым.
Обязательно позвони close()
и передайте возвращаемое значение из open, когда вы закончите с файлом.
Ваш пример выше будет выглядеть примерно так:
int main()
{
char buf [255];
int tst;
int dsply = open(DEV_CONSOLE , 0);
//next we will open the file. We will want to read and write, so we use
// O_RDWR. If the files does not already exist, we want to create it, so
// we use O_CREAT. If the file *DOES* already exist, we want to truncate
// and start fresh, so we delete all previous contents with O_TRUNC
tst = open("test.txt", O_RDWR | O_CREAT | O_TRUNC);
// always check the return value.
if(tst < 0)
{
write(dsply, "ERROR!", 6);
return 0;
}
strcpy(buf, "this text should write in file.")
write(tst, buf, strlen(buf));
memset(buf, 0, sizeof(buf));
read(tst, buf, 30);
//be sure to close when you are done
close(tst);
write(dsply,buf,strlen(buf));
//you'll want to close your devices, as well
close(dsply);
return 0;
}
Ваши комментарии также спрашивают о поиске. Для этого вам также необходимо использовать lseek
с одним из следующих, который указывает, откуда вы начинаете:
SEEK_SET
- начало файлаSEEK_CUR
- Текущее местоположение указателя поискаSEEK_END
- конец файла
пример
SomeDataStruct myData;
...
//assume "curPosition" is set to the beginning of the next data structure I want to read
lseek(file, curPosition, SEEK_SET);
result = read(file, (char*)&myData, sizeof(SomeDataStruct));
curPosition += sizeof(SomeDataStruct);
//now "curPosition" is ready to pull out the next data structure.
Обратите внимание, что внутренний указатель файла уже AT "curPosition", но, делая это таким образом, я могу перемещаться вперед и назад по желанию, когда я манипулирую тем, что есть. Так, например, если бы я хотел вернуться к предыдущей структуре данных, я бы просто установил "curPosition" следующим образом:
curPosition -= 2 * sizeof(SomeDataStruct);
Если бы я не хотел отслеживать "curPosition", я мог бы также сделать следующее, что также переместит внутренний указатель файла в правильное место:
lseek(file, - (2 * sizeof(SomeDataStruct)), SEEK_CUR);
Вы можете выбрать тот метод, который лучше всего подходит для вас.