如何解决使用readfd,buf,sz创建我自己的fgets函数
我正在尝试构建自己的lineread方法,以使用filedes,缓冲区和size参数逐行读取文件。我的理由是,我可以使用1作为我的大小来读取文件,以检查每个字符并检查它是否在行尾。如果不是,它必须继续读取,如果是,它将停止并将结果发送到主函数。但是我的问题是我似乎无法正确获取文件。 这是代码:
read_file.c:
#include <fcntl.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include "lineread.h"
int main(int argc,char *argv[])
{
if (argc != 2) {
printf("Usage: read_file filename\n");
return 1;
}
int fd = open(argv[1],O_RDONLY);
ssize_t read_sz;
unsigned long counter = 0;
while (true) {
char buf[64] = { 0 };
read_sz = lineread(fd,buf,63);
if (read_sz <= 0) {
break;
}
printf("Read %lu,bytes: %zu | %s\n",counter,read_sz,buf);
}
return 0;
}
lineread.c:
#include <unistd.h>
#include <errno.h>
ssize_t lineread(int fd,char *buf,size_t sz)
{
while(*buf != '\n') {
if(*buf == '\0'){
return 0;
}
else {
read(fd,1);
}
}
}
lineread.h:
#ifndef _LINEREAD_H_
#define _LINEREAD_H_
#include <sys/types.h>
ssize_t lineread(int fd,size_t sz);
#endif
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。