c_cpp 替代简化的fgets实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 替代简化的fgets实现相关的知识,希望对你有一定的参考价值。

#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>

#define MAXLEN 1024

char * fgets (char *str, int size, FILE *stream);

int main(int argc, char **argv) {
char *fname;
FILE *stream;
int fd;
char *buf = (char *)malloc(MAXLEN * sizeof(char));

if (argc > 1) {
    fname = argv[1];
} else {
    fname = "./test.txt";
}

fd = open (fname, O_RDWR|O_CREAT, 0644);
if (fd < 0 || fd == 0) {
    printf("failed to open or create file.\n");
    exit(1);
}
stream = fdopen (fd, "r");
if (!stream) {
printf("failed to open stream.\n");
    exit(1);
}
fgets(buf, MAXLEN, stream); // my version of fgets here
fputs(buf, stdout);
}

char * fgets (char *str, int size, FILE *stream) {
    int c = 0;
    char d = '\n';
    int n = size;
    char *s = str;

    while (--n > 0 && (c = fgetc (stream)) != EOF && (*s++ = c) != d) {
        
    if (c == d)
        *--s = '\0';
    else
        *s = '\0';
    }
    return s;
}

以上是关于c_cpp 替代简化的fgets实现的主要内容,如果未能解决你的问题,请参考以下文章

c语言gets()函数与它的替代者fgets()函数

fgets函数和缓冲区示例

c_cpp 替代排序

c_cpp 单链表中的替代奇数和偶数节点

c_cpp BrickstorOS和illumos系统的替代ps命令

c_cpp ROOT TH1类的简化基本功能