2015-08-02 8 views
1

Я хочу читать и писать текстовый файл или .dat-файл в verifone для хранения данных на нем. Как я могу это сделать? вот мой кодкак читать и писать из .dat-файла в verifone

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

Вам редко приходится читать и записывать в файл одновременно, поэтому не используйте режимы '+', пока не будете знакомы с файловыми вводами-выводами. Вместо этого откройте файл с помощью '' w '', напишите ему, закройте его. Затем снова откройте его с помощью «r» ', прочитайте его и закройте. Сделайте привычку проверять возвращаемые значения для условий ошибки и спаривания каждого 'fopen' с помощью соответствующего' fclose'. –

+0

как я могу искать в этом файле? по команде? – farshid

+0

Не совсем понятно, что вы хотите. Думаю, ваш вопрос о чтении и письме неверен. (Если вы хотите иметь структуру, похожую на базу данных, загрузите ее в память, работайте с базой данных в памяти и затем скопируйте ее в файл снова. В любом случае прочитайте хороший учебник по файловым ввода-выводам в C.) –

ответ

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 (Возвращает значение ошибки, если файл уже существует)

На success, open вернет положительное целое число, которое является дескриптором, который может использоваться для последующего доступа к файлу. При сбое он возвращает -1;

Когда файл открыт, вы можете использовать read() и write() для управления содержимым.

Обязательно позвоните close() и передайте возвращаемое значение из открытого файла, когда вы закончите с файлом.

Ваш пример выше будет выглядеть примерно так:

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 - 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. 

Учтите, что внутренний указатель файла уже находится в «curPosition», но при этом он позволяет мне двигаться вперед и назад по мере того, как я манипулирую тем, что есть.Так, например, если бы я хотел, чтобы вернуться к предыдущей структуры данных, я бы просто установить «curPosition» следующим образом:

curPosition -= 2 * sizeof(SomeDataStruct); 

Если бы я не хотел, чтобы следить за «curPosition», я мог бы также сделать следующее, который также перемещает внутренний указатель файла на нужное место:

lseek(file, - (2 * sizeof(SomeDataStruct)), SEEK_CUR); 

Вы добираетесь, чтобы выбрать тот метод, который лучше работает для вас.

Смежные вопросы