问题描述
我正在尝试构建自己的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 (将#修改为@)