利用Linux的系统调用进行文件编程
实现了通讯录的文件输出以及文件输入使得通讯录得以保存
1.修改了writefile函数,使得输出更美观
2.重写了init 函数,使得初始化时可以把文件中的通讯录读入链表
int init(node* head)
{
int n = 0;
node p;
node newnode = (node)malloc(sizeof(struct Node));
if(newnode == NULL)
{
return F;
}
newnode->next = NULL;
newnode->data.id = 0;
mstrcpy(newnode->data.name, "name") ;
mstrcpy(newnode->data.num, "number") ;
mstrcpy(newnode->data.address, "address");
*head = newnode;
p = newnode;
FILE * file = fopen("./Addr_List", "r");
if(NULL == file)
{
perror("open for read:");
return 0;
}
int flag = 0;
int id = 0;
int i = 0;
char c;
while((c = fgetc(file)) != EOF)
{
switch(c)
{
case '|':
flag++;
i = 0;
break;
case ' ':
break;
case '\n':
n++;
id++;
flag = 0;
node newnode = (node)malloc(sizeof(struct Node));
if(newnode == NULL)
{
return F;
}
newnode->next = NULL;
newnode->data.id = id;
p->next = newnode;
p = p->next;
break;
default:
if(flag == 2)
{
p->data.name[i] = c;
i++;
}
else if(flag == 3)
{
p->data.num[i] = c;
i++;
}
else if(flag == 4)
{
p->data.address[i] = c;
i++;
}
break;
}
}
fclose(file);
return n;
}
void writefile(node head)
{
FILE * file = fopen("./Addr_List", "w");
if(file == NULL)
{
perror("open for write:");
return;
}
while(head->next != NULL)
{
fprintf(file, "|%-4d|%-15s |%-15s |%-15s|\n", head->data.id, head->data.name, head->data.num, head->data.address);
head = head->next;
}
fprintf(file, "|%-4d|%-15s |%-15s |%-15s|", head->data.id, head->data.name, head->data.num, head->data.address);
fclose(file);
return;
}