使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...