【发布时间】:2019-09-22 19:43:22
【问题描述】:
我已将结构 Student 写入文件并将整个结构读取到控制台。 现在,我想重新定位文件指针以读取有关特定学生的信息。我只想使用系统调用来写入文件(read()、write()、lseek())
这是用于将结构写入文件的代码:
struct Student{
char name[20];
char dob[20];
int id;
char sex[20];
};
struct Student stud[size];
for (int i = 0;i<size;i++){
printf("Enter name:");
scanf("%s",stud[i].name);
printf("Enter date of birth:");
scanf("%s",stud[i].dob);
printf("Enter id: ");
scanf("%d",&stud[i].id);
printf("Enter sex: ");
scanf("%s",stud[i].sex);
n =write(fd,&stud,sizeof(stud));
}
这是读取写入文件的整个结构的代码:
struct Student studread[5];
int j=0;
while (((n =read(fd,&studread, sizeof(studread))))){
printf("%s\n",studread[j].name);
printf("%s\n",studread[j].dob);
printf("%d\n",studread[j].id);
printf("%s\n",studread[j].sex);
j++;
}
这是读取特定学生信息的代码:
struct Student pread;
printf("Enter a position: ");
scanf("%d",&pos);
nobytes =sizeof(struct Student) * pos-1;
position = lseek(fd,nobytes,SEEK_SET);
while (size=read(fd,&pread,sizeof(pread))){
printf("%s\n",pread.name);
printf("%s\n",pread.dob);
printf("%d\n",pread.id);
printf("%s\n",pread.sex);
}
您能帮我使用 lseek() 从文件中读取特定学生的信息来定位文件指针吗?
【问题讨论】:
-
当
if语句以 5 个右括号结束时,您实际上可能会考虑重构代码。 -
此外,您无法保证
read将实际读取所有请求的字节。这就是为什么它返回正确读取的字节数(您忽略了)。
标签: c linux unix operating-system