如题,因为用到fdopen总是报参数无效,看手册说fdopen时候的权限参数要和open当时一致,问题时怎么知道一个莫名的句柄所具备的rw标志啊?
可以利用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部分是否允许了读/写权限就够了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。