- 利用chmod函数实现自己简化版chmod命令时所需要注意的问题:利用chmod 函数实现chmod命令修改一个文件权限时需要输入其权限对应的数字。此时输入的数字是字符型的(即字符串),需要把它转换为八进制整数。首先我们先把这个字符串转换为十进制数,可以调用atoi函数,然后再把十进制整数转换为八进制整数 。
例如,设置一个文件的访问权限为:_wx_wx____
,那么它对应的八进制数就是330。输入设置权限字符串330,然后转换为十进制整数330,即:把原来的八进制数330扩大为八进制数512。现将十进制数330转换为八进制数330,即再缩小同样倍数:5*8*8+1*8+2=330(八进制),这样,就把一个字符串330转换成八进制330。当然,也可以在宏之间取或运算而不用进制转换。 - stderr 输出到屏幕。
perror函数是将输入的一些信息和【现在的】errno所对应的错误一起输出到标准设备(stderr)。 - memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
_ _LINE_ _
是预编译器内置宏表示行数,注意形式。O_RDONLY ,O_WRONLY, O_RDWR
(只读,只写,读写)用%d
形式输出时分别为0,1,2
;故可以用掩码O_ACCMODE
(即:3)和fcntl函数返回值进行运算,从而判断文件打开方式。- 文件锁设置时,步骤为:检查能否设置锁——设置锁——释放锁。单个进程在同一字节上只能设置一种锁,新的锁会取代旧的锁。锁的不兼容性是针对多个进程之间的。
- 注意if, if 和if,else if的使用方法。因为如果第一个if成立,随着if语句的执行,可能会影响后面if条件的判断。例如:
/*例1*/
int func()
{
int i=2;
if(i<3){
i=4;
}
if(i>3){
i=2;
}
return i;
}
/*例2*/
int func()
{
int i=2;
if(i<3){
i=4;
}
else if(i>3){
i=2;
}
return i;
}
显然,两个例子结果不同 。两个例子中i>3 和i<3看似都互不相干,但是例1中在执行第一个if语句时已经改变了i的值。