gpt4 book ai didi

c - 如何捕捉文件模式?

转载 作者:行者123 更新时间:2023-12-01 13:16:26 25 4
gpt4 key购买 nike

我必须捕捉以下模式:

“rb”“r+b”“wb”

我尝试执行以下代码(已编译):

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

int main()
{
FILE *file = fopen("data.bin", "r");
if (!file){
perror("");
return -1;
}

int fd = fileno(file);
if (fcntl(fd, F_GETFL) == O_RDONLY){
printf("read only\n");
}

// printf("%d\n", O_APPEND);

fclose(file);
return 0;
}

但是什么也没打印出来。 fcntl() 返回整数,如 32768,但我需要库中的宏,如 O_RDONLY。

最佳答案

一般来说,在给定 FILE* 句柄的情况下,您无法使用可移植的 C 程序捕获 fopen 意义上的文件模式。

例如,您的FILE*可能通过popenfmemopenopen_memstream获得fdopen 等...并且可以是只写的或只读的。它甚至可能没有 fileno 给出的有效文件描述符。

您应该采用定义和记录关于它们的约定

例如,在 Linux 上,套接字可能在操作系统级别是可读和可写的,并且您可以在其上有两个不同的 FILE* 句柄(使用 fdopen)对于读取和写入端。

当然,FILE* 句柄在 fclose(或 pclose)之后不可用

所以一个假设的例程 fprint_stuff(FILE*, struct stuff_st*) 应该记录第一个参数是一个可写文件句柄,并且只会调用 fwrite fprintf 但应该检查它们是否失败。

关于c - 如何捕捉文件模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com