微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用readfd,buf,sz创建我自己的fgets函数

如何解决使用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 举报,一经查实,本站将立刻删除。