利用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; }