C替换fputs()/ fgets()with open()

Aus*_*tin 1 c fgets kernel-module fcntl

我正在学习与用户级程序进行通信的内核模块,并且最初正在打开一个文件

FILE *pFile = fopen(...)
Run Code Online (Sandbox Code Playgroud)

用它写信给它

char *str = malloc(10);
fputs(str, pFile);
Run Code Online (Sandbox Code Playgroud)

但是现在我需要使用功能#include <fcntl.h>来尝试一些异步通知,而我需要使用的示例

int pFile;
pFile = open("/dev/mymodule", O_RDWR);
Run Code Online (Sandbox Code Playgroud)

我认为我不能再使用,fputs()或者fgets()因为它需要一个FILE *ptr而我int现在已经有了.我想我应该使用write()read()不是.

这是怎么回事?

write(pFile, str,  sizeof(str));

char line[256];
    while (read(pFile, line, 256) != NULL) {
            printf("%s", line);
        }
Run Code Online (Sandbox Code Playgroud)

Mar*_*rst 5

您可以使用以下命令打开FILE*基于文件描述符fdopen():

FILE *file = fdopen(pfile, "rw");
Run Code Online (Sandbox Code Playgroud)

参考:fdopen - 将流与文件描述符相关联

  • 你可以在`int`上的`FILE*`和`fcntl()`上使用`fgets()`和`fputs()`.只是不要将读取和写入`FILE*`与读取和写入`int`混合在一起,因为`FILE*`是缓冲的而`int`不是,因此事情会变得不同步. (3认同)