关于FILE_MODE值的问题

本文解释了FILE_MODE宏的含义及其在进程间通信中的作用,并强调了用户、用户组和其他用户的文件权限限制。无论用户如何自定义,FILE_MODE的值都不能设为0777。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.sina.com.cn/s/blog_803527e70100v3b7.html

众所周知,FILE_MODE是一个宏,它经常定义成如下形式;

      #define  FILE_MODE(S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
     
      定义成这样的意思是:允许用户读、写;组成员只读和其他用户只读。这些权限位会被当前进程的文件模式创建掩码修正,也就是程序中用到FILE_MODE的地方,它的值会被替换为0644。 
      当然,这个值是可以用户自定义的。但是,经过试验我们发现,这个权限是有限制的。无论是在FIFO中还是在Posix消息队列中,FILE_MODE的值都不可能是0777。因为用户的权限可以是读、写、执行的;但是用户组和其它用户最高权限是可读可执行,不可写。因此,如果你将FILE_MODE自定义如下:
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRPS_IROTH|S_IWOTH|S_IXOTH);
或者#define FILE_MODE 0777;
     假如生成的可执行文件名是test,当你通过ls -l test查看时,你只能得到如下结果:
-rwxr-xr-x 1 jingjing jingjing13315 2011-07-28 09:09 test;
注意:这里的权限不是-rwxrwxrwx,因为用户组和其他用户根本没有写的权限
关于FILE_MODE值的问题所以,以后在进程间通信(IPC)中用到FILE_MODE的地方就要记得,可不能把它设置为0777啦!关于FILE_MODE值的问题

[debug_ramdisk] c_ino = 300000 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" [dev] c_ino = 300001 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" [init] c_ino = 300002 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 32768 file_mode = "0o750" [metadata] c_ino = 300003 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" [mnt] c_ino = 300004 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" [proc] c_ino = 300005 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" [second_stage_resources] c_ino = 300006 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" [sys] c_ino = 300007 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" [system] c_ino = 300008 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" ["system/bin"] c_ino = 300009 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o751" ["system/bin/e2fsck"] c_ino = 300010 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 32768 file_mode = "0o755" ["system/etc"] c_ino = 300011 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" ["system/etc/ramdisk"] c_ino = 300012 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 16384 file_mode = "0o755" ["system/etc/ramdisk/build.prop"] c_ino = 300013 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 file_type = 32768 file_mode = "0o644" ["TRAILER!!!"] c_ino = 300014 c_uid = 0 c_gid = 0 c_nlink = 1 c_mtime = 0 c_dev_maj = 0 c_dev_min = 0 c_rdev_maj = 0 c_rdev_min = 0 c_mode = 493 这些表是用来做什么的
最新发布
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值