《UNIX高级环境编程》读书笔记之文件与目录(3)
来源:互联网 发布:传智播客大数据 编辑:程序博客网 时间:2024/05/21 11:03
练习:
实现shell里面的umask命令
void get_umask(int argc,char * argv[]){ if(argc == 2)//get umask { mode_t mode = umask(0000); int user = 0,group = 0,other = 0; if(mode & S_IRUSR) user = user + 4; if(mode & S_IWUSR) user = user + 2; if(mode & S_IXUSR) user = user + 1; if(mode & S_IRGRP) group = group + 4; if(mode & S_IWGRP) group = group + 2; if(mode & S_IXGRP) group = group + 1; if(mode & S_IROTH) other = other + 4; if(mode & S_IWOTH) other = other + 2; if(mode & S_IXOTH) other = other + 1; umask(mode); printf("0%d%d%d\n",user,group,other); } else//set umask { int len = strlen(argv[2]); switch(len) { case 1: { int a; a = argv[2][0] - '0'; mode_t mode = 0; if(a < 0 || a > 7) { printf("octal number out of range\n"); return ; } if(a & 0x04) mode = mode | S_IROTH; if(a & 0x02) mode = mode | S_IWOTH; if(a & 0x01) mode = mode | S_IXOTH; umask(mode); break; } case 2: { int a,b; mode_t mode = 0; a = argv[2][0] - '0'; b = argv[2][1] - '0'; if(a < 0 || a > 7 || b < 0 || b > 7) { printf("octal number out of range\n"); return ; } if(b & 0x04) mode = mode | S_IROTH; if(b & 0x02) mode = mode | S_IWOTH; if(b & 0x01) mode = mode | S_IXOTH; if(a & 0x04) mode = mode | S_IRGRP; if(a & 0x02) mode = mode | S_IWGRP; if(a & 0x01) mode = mode | S_IXGRP; umask(mode); break; } case 3: { int a,b,c; mode_t mode = 0; a = argv[2][0]; b = argv[2][1]; c = argv[2][2]; if(a < 0 || a > 7 || b < 0 || b > 7 || c < 0 || c > 7) { printf("octal number out of range\n"); return ; } if(a & 0x04) mode = mode | S_IRUSR; if(a & 0x02) mode = mode | S_IWUSR; if(a & 0x01) mode = mode | S_IXUSR; if(b & 0x04) mode = mode | S_IRGRP; if(b & 0x02) mode = mode | S_IWGRP; if(b & 0x01) mode = mode | S_IXGRP; if(c & 0x04) mode = mode | S_IROTH; if(c & 0x02) mode = mode | S_IWOTH; if(c & 0x01) mode = mode | S_IXOTH; umask(mode); break; } default: { int a,b,c,d; mode_t mode = 0; a = argv[2][len-4]; b = argv[2][len-3]; c = argv[2][len-2]; d = argv[2][len-1]; if(a != 0 || b < 0 || b > 7 || c < 0 || c > 7 || d < 0 || d >7) { printf("octal number out of range\n"); return ; } if(b & 0x04) mode = mode | S_IRUSR; if(b & 0x02) mode = mode | S_IWUSR; if(b & 0x01) mode = mode | S_IXUSR; if(c & 0x04) mode = mode | S_IRGRP; if(c & 0x02) mode = mode | S_IWGRP; if(c & 0x01) mode = mode | S_IXGRP; if(d & 0x04) mode = mode | S_IROTH; if(d & 0x02) mode = mode | S_IWOTH; if(d & 0x01) mode = mode | S_IXOTH; umask(mode); break; } } }}
0 0
- 《UNIX高级环境编程》读书笔记之文件与目录(3)
- 《UNIX环境高级编程》读书笔记之文件与目录(2)
- 文件和目录(二)--unix环境高级编程读书笔记
- 《UNIX环境高级编程》读书笔记之文件和目录(1)
- 《UNIX环境高级编程》读书笔记之文件IO(1)
- 《UNIX环境高级编程》读书笔记之文件IO(2)
- 《UNIX环境高级编程》四文件和目录读书笔记
- 《Unix环境高级编程》读书笔记:文件和目录
- 《unix环境高级编程》 读书笔记 目录
- UNIX环境高级编程读书笔记 第一部分 文件 (第四章 文件和目录)
- 《unix环境高级编程》 读书笔记 (3)
- Unix环境高级编程读书笔记(3)
- UNIX环境高级编程读书笔记(3)
- unix环境高级编程 chap4 文件与目录
- 《Unix环境高级编程》之 文件和目录
- 读书笔记之UNIX环境高级编程(13)
- 读书笔记之UNIX环境高级编程(8)
- 读书笔记之UNIX环境高级编程(11)
- mac下Eclipse代码提示功能设置(Java & C/C++)
- SQL语句在数据库中是如何执行的
- 枚举排列
- 黑马程序员——继承(二)
- ID3算法
- 《UNIX高级环境编程》读书笔记之文件与目录(3)
- 本博客停止更新所有内容转到www.fddcn.cn
- 关于全排列问题的总结(康托展开)
- wireshark capture filter example
- WebCollector入门教程
- Vlan相关知识杂记
- php学习
- HDU 5001 Walk(鞍山网络赛E题)
- 【Unity Shaders】使用Unity Render Textures实现画面特效——建立画面特效脚本系统