如何在 verifone 中读取和写入 .dat 文件
how to read and write from .dat file in verifone
我想在 verifone 中读写文本或 .dat 文件以在其上存储数据。
我怎样才能做到?
这是我的代码
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;
}
"Programmers Manual for Vx Solutions" ("23230_Verix_V_Operating_System_Programmers_Manual.pdf") 的第 3 章都是关于文件管理的,包含了我在终端上处理数据文件时通常使用的所有功能。通读一下,我想你会找到你需要的一切。
为了让您开始,您需要将 open()
与您想要的标志一起使用
O_RDONLY
(只读)
O_WRONLY
(只写)
O_RDWR
(读写)
O_APPEND
(以文件末尾的文件位置指针打开)
O_CREAT
(如果文件不存在则创建),
O_TRUNC
(如果文件已经存在,truncate/delete 之前的内容),
O_EXCL
(如果文件已经存在,Returns错误值)
成功后,open 将 return 一个正整数,它是一个句柄,可用于后续访问该文件。失败时,它 returns -1;
当文件打开时,您可以使用 read()
和 write()
来操作内容。
一定要调用 close()
并在完成文件后从 open 中传入 return 值。
你上面的例子看起来像这样:
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.
请注意,内部文件指针已经在 "curPosition",但这样做可以让我在操作那里的内容时随意向前和向后移动。所以,例如,如果我想回到以前的数据结构,我会简单地设置 "curPosition" 如下:
curPosition -= 2 * sizeof(SomeDataStruct);
如果我不想跟踪 "curPosition",我还可以执行以下操作,这也会将内部文件指针移动到正确的位置:
lseek(file, - (2 * sizeof(SomeDataStruct)), SEEK_CUR);
您可以选择最适合您的方法。
我想在 verifone 中读写文本或 .dat 文件以在其上存储数据。 我怎样才能做到? 这是我的代码
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;
}
"Programmers Manual for Vx Solutions" ("23230_Verix_V_Operating_System_Programmers_Manual.pdf") 的第 3 章都是关于文件管理的,包含了我在终端上处理数据文件时通常使用的所有功能。通读一下,我想你会找到你需要的一切。
为了让您开始,您需要将 open()
与您想要的标志一起使用
O_RDONLY
(只读)O_WRONLY
(只写)O_RDWR
(读写)O_APPEND
(以文件末尾的文件位置指针打开)O_CREAT
(如果文件不存在则创建),O_TRUNC
(如果文件已经存在,truncate/delete 之前的内容),O_EXCL
(如果文件已经存在,Returns错误值)
成功后,open 将 return 一个正整数,它是一个句柄,可用于后续访问该文件。失败时,它 returns -1;
当文件打开时,您可以使用 read()
和 write()
来操作内容。
一定要调用 close()
并在完成文件后从 open 中传入 return 值。
你上面的例子看起来像这样:
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.
请注意,内部文件指针已经在 "curPosition",但这样做可以让我在操作那里的内容时随意向前和向后移动。所以,例如,如果我想回到以前的数据结构,我会简单地设置 "curPosition" 如下:
curPosition -= 2 * sizeof(SomeDataStruct);
如果我不想跟踪 "curPosition",我还可以执行以下操作,这也会将内部文件指针移动到正确的位置:
lseek(file, - (2 * sizeof(SomeDataStruct)), SEEK_CUR);
您可以选择最适合您的方法。