判断一个句柄【open时】是w+还是a+

发布于 2022-08-29 23:43:21 字数 82 浏览 14 评论 0

如题,因为用到fdopen总是报参数无效,看手册说fdopen时候的权限参数要和open当时一致,问题时怎么知道一个莫名的句柄所具备的rw标志啊?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坠似风落 2022-09-05 23:43:21

可以利用fcntl来获取一个fd的属性,然后通过掩码获知是否有某个具体属性

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int fd = open("test", O_RDONLY | O_APPEND, S_IRUSR);
    int flags = fcntl(fd, F_GETFL);
    if (flags == -1) {
        perror("fcntl");
        exit(1);
    }
    else {
        int access_mode = flags & O_ACCMODE;
        switch(access_mode)
        {
        case O_RDWR:
            printf("wr");
            break;
        case O_RDONLY:
            printf("r");
            break;
        default:
            printf("w");
        }
        printf("\t");
        if (flags & O_APPEND) {
            printf("append ");
        }
        if (flags & O_CREAT) {
            printf("create ");
        }
        if (flags & O_TRUNC) {
            printf("truncate ");
        }
        printf("\n");
    }
    return 0;
}

看了下fdopen的源码,似乎仅需要判断O_ACCMODE部分是否允许了读/写权限就够了。

栖迟 2022-09-05 23:43:21

好像还真没什么办法,要不你多试几次,反正就只有读和写两种权限要处理。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文