文章目录
11.16 Linux 数字权限使用
Linux中对文件的权限有严格的控制,想要对某个文件进行相关的操作时,要有相应的权限才可以。
一般权限包括:读r、写w、执行x
Linux权限的使用者分类有三种:
- u:文件拥有用户
- g:同一组的用户
- o:其他组的用户
如果其他组的用户想要拥有对文件进行某一操作的权限,可以将该用户加入具备权限的组,所以一个用户可以同时归属多个组。一般使用chmod
命令来对文件的权限进行修改设置。
权限可以用相应的数字来表示,数字4、2、1分别代表读、写、执行权限,所以对文件的权限描述可以通过4、2、1三个数字的相加来表示(三个数字的组合都是唯一的)7=4+2+1 6=4+2 5=4+1 3=2+1
。
而且一个文件的权限是针对三个
比如:
chmod 700 test.c #-rwx------ u:读、写、执行 g:无权限 o: 无权限
chmod 740 test.c #-rwxr----- u:读、写、执行 g:只读 o: 无权限
chmod 761 test.c #-rwxrw---x u:读、写、执行 g:读、写 o: 只执行
常见权限形式:
-rw------- (600) #只有拥有者有读写权限。
-rw-r--r-- (644) #只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) #只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) #拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) #拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) #所有用户都有文件读、写权限。
-rwxrwxrwx (777) #所有用户都有读、写、执行权限。
11.17 二维数组的指针运算
int a [ 5 ] [ 4 ], ( * p)[4]=a;,数组a的首地址为100,* (p+2)+3等于 ( )
- A 116
- B 118
- C 144
- D 122
答案是:C
对于int a[5][4]
,a相当于一个二级指针,a
是一个指针数组,数组中的每一个元素a[0] a[1] a[2]
都是指针;a[0]
是一个指向数组的指针,数组中有4个int数据。
对于int (*p)[4]=a
,p是一个指针数组,数组中有4个int数据,即p和a在指向的对象上是一致的,然后p=a
,a的首地址为100,代表b中存储的值就是100。
*(p + 2)
相当于a[2]
,还是一个指针,相对于a来讲移动了8个int的内存地址,然后又*(p + 2) + 3
,又相当于移动了3个int的内存地址,所以一共移动了11个int的内存地址,即44Byte,所以*(p + 2) + 3
的值为144,本质上还是地址。
11.18 Make file 变量
makefile中变量分为三种:
- 用户自定义变量
- 预定义变量
- 自动变量
自定义变量的定义和引用
变量是用来代替如下类型的文本字符串:
- 系列文件的名字
- 传递给编译器的参数
- 需要一些的程序
- 需要查找源代码的目录
- 需要输出信息的其他目录
- 其他事情
定义变量的方法为:
- 递归展开:VAR=var
- 简单扩展:VAR :=var
要注意的是:递归展开在展开的时候可以将内嵌的变量全部展开,但是如果在变量后面追加内容,可能在扩展的过程中导致无穷循环。所以一般情况下使用简单扩展比较好。
变量的使用:
于shell中一样,要引用变量的值,需要符号$
,以$(VAR)
的形式来引用变量,只有在变量定义的时候不需要$
,引用变量相当于C语言中的宏定义。
若要表示$
本身,则$$
即可
例如:
OBJ = main.o hello.o bye.o
CC = gcc
CFLAGES = -Wall -O -g
create: $(OBJ)
$(CC) $(CFLAGES) $(OBJ) -o a.out
main.o: main.c
$(CC) $(CFLAGES) -c main.c -o main.o
hello.o: hello.c
$(CC) $(CFLAGES) -c hello.c -o hello.o
bye.o: bye.c
$(CC) $(CFLAGES) -c bye.c -o bye.o
clean:
rm *.o
变量在定义的时候,直接=即可,变量在引用的时候必须加上
$
可以通过+=
运算为变量添加新的值