文件写入三行字符,再顺序读出三行:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>
#define MAX_SIZE 1024
void read_line(int fd, char *buffer, int max_len) //自定义读函数,只读一行
{ //函数实现原理为一个一个字符录入
char temp;
int ret;
int i;
for(i = 0; i < max_len; i++)
{
if((ret = read(fd,&temp,1)) < 0)
{
perror("read data failed!");
return;
}
if(temp == '\n' || ret == 0)
{
break;
}
buffer[i] = temp;
}
buffer[i] = '\0';
}
int main(int argc, char *argv[])
{
int fd;
if((fd = open(argv[1], O_CREAT | O_RDWR, 0655)) < 0) //读函数,且文件权限为可读可写
{
perror("open file failed!");
exit(1);
}
char buffer[MAX_SIZE];
char temp;
int i;
temp = '\n';
for(i = 0; i < 3; i++)
{
memset(buffer,0,sizeof(buffer)); //清空buffer缓存
scanf("%s",buffer); //依次录入buffer
if(write(fd,buffer,strlen(buffer)) < 0) //一行一行的写入文件
{
perror("write data failed!");
exit(1);
}
write(fd,&temp,1);
}
lseek(fd,0,SEEK_SET); //移动文件读写头到文件头
for(i = 0;i < 3; i++)
{
// lseek(fd,0,SEEK_SET);
memset(buffer,0,sizeof(buffer));
read_line(fd,buffer,sizeof(buffer)); //调用自定义函数
printf("readline = %s\n",buffer); //循环3次,依次输出
}
return 0;
}