//PciAdTest
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
//define
#define FILENAME "DataInfo.txt"
#define MAXLEN 1024
//typedef
typedef struct _ReadData
{
int *recvbuf;
struct _ReadData *next;
} ReadData;
//Golbal
int g_fileNumber = 0;
ReadData *g_readDataHead = NULL;
ReadData * newNode(int *buf)
{
ReadData *p;
int i;
p = (ReadData *) malloc(sizeof(ReadData));
if(p == NULL)
return NULL;
p->recvbuf = buf;
p->next = NULL;
return p;
}
ReadData *insertNode(int *buf)
{
ReadData *p, *q;
p = newNode(buf);
if(p == NULL)
return NULL;
printf("Enter\n");
if(g_readDataHead == NULL)
{
g_readDataHead = p;
return g_readDataHead;
}
for(q = g_readDataHead; q->next != NULL; q = q->next );
q->next = p;
p->next = NULL;
return g_readDataHead;
}
void destoryList()
{
ReadData *p, *q;
int i;
for(p = g_readDataHead; p != NULL; p = q)
{
q = p->next;
free(p->recvbuf);
free(p);
}
g_readDataHead = NULL;
}
void StoreFile()
{
char Filename[20];
int fd, ret;
ReadData *p;
sprintf(Filename, "%d", g_fileNumber);
strncat(Filename, ".txt", strlen(".txt"));
printf("Filename = %s\n", Filename);
fd = open(Filename, O_RDWR | O_CREAT , 0755);
if(fd < 0)
printf("StoreFile open ERROR...\n");
for(p = g_readDataHead; p != NULL; p = p->next )
{
ret = write(fd, p->recvbuf, MAXLEN);
if(ret < 0)
printf("StoreFile write ERROR..\n");
}
close(fd);
destoryList();
}
void InitFileInfo()
{
int fd, ret;
fd = open(FILENAME, O_RDWR );
if(fd < 0)
{
printf("firsr run.....\n");
fd = open(FILENAME, O_RDWR | O_CREAT , 0755);
if(fd < 0)
printf("InitFileInfo open ERROR...\n");
ret = write(fd, &g_fileNumber, sizeof(g_fileNumber));
if(ret < 0)
printf("InitFileInfo write ERROR..\n");
close(fd);
return;
}
else
{
ret = read(fd, &g_fileNumber, sizeof(g_fileNumber));
if(ret < 0)
printf("InitFileInfo read ERROR..\n");
printf("Now g_fileNumber is %d\n", g_fileNumber);
close(fd);
}
}
void UpdateFileInfo()
{
int fd, ret;
fd = open(FILENAME, O_RDWR | O_TRUNC);
if(fd < 0)
printf("UpdataFileInfo open ERROR...\n");
ret = write(fd, &g_fileNumber, sizeof(g_fileNumber));
if(ret < 0)
printf("UpdataFileInfo write ERROR..\n");
lseek(fd, 0, SEEK_SET);
ret = read(fd, &g_fileNumber, sizeof(g_fileNumber));
if(ret < 0)
printf("UpdataFileInfo read ERROR..\n");
printf("Update after g_fileNumber is %d\n", g_fileNumber);
return;
}
int main()
{
int *TestBuf;
int i, k;
int *p;
InitFileInfo();
for(k = 0; k < 10; k++)
{
TestBuf = (int *)malloc(sizeof(int) * MAXLEN);
if(TestBuf == NULL)
printf("mallov ERROR..\n");
for(i = 0; i < MAXLEN; i++)
TestBuf[i] = i;
if(insertNode(TestBuf) == NULL)
printf("insert ERROR...\n");
else
printf("OK\n");
}
g_fileNumber++;
UpdateFileInfo();
StoreFile();
return 0;
}