开发者社区> 问答> 正文

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

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

展开
收起
a123456678 2016-06-07 18:41:57 1739 0
1 条回答
写回答
取消 提交回答
  • 可以利用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部分是否允许了读/写权限就够了。

    2019-07-17 19:30:44
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载