文章目录
一、字符串的分割函数strtok()
二、获取信息函数
三、chmod修改权限
一、字符串的分割函数strtok()
头文件:#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
//char* str = "i am a student";//错误
char str[] = "i am a student";
char* arrr[10] = {0};
char* s = strtok(str," ");//语句一
int i = 0;
while(s != NULL)
{
arr[i++] = s;
s = strtok(NULL," ");//语句二
}
for(int j = 0;j <= i;i++)
{
printf("arr[%d] = %s\n",j,arr[j]);
}
exit(0);
}
1.1 strtok函数的作用及使用
第一次分割字符串str:将第一个参数字符串str按照第二个参数空格进行分割,即在字符串str中遇到空格,则让字符指针s指向空格之前的字符串。
第二次继续分割字符串str:当在第一次分割的后面继续分割,则需要将第一个参数改成NULL。
1.2 strtok函数的底层实现
底层实现是将str字符串中的空格改为'\0',而上面的代码中str为字符指针,无法修改,所以上面的代码存在错误。需要将 char* str= "i am a student"; 改成 char str[ ]= "i am a student";
二、获取信息函数
2.1getuid获取当前用户的UID
头文件:#include<unistd.h>
返回值为大于等于0的整型uid_t 当返回值为0时,表明当前用户为管理员用户;当为大于0时,为普通用户。
2.2getpwuid获取用户信息结构体
头文件:#include<pwd.h>
将该用户的UID号作为参数传给getpwuid函数。返回值为struct passwd结构体指针,若为空则证明获取失败
该结构体成员:
2.3gethostname获取主机名
头文件:#include<unistd.h>
参数为两个,第一个为字符指针,第二个为获取的字符个数。返回值为整型,若为-1则获取失败。
2.4getcwd获取当前目录
头文件:#include<unistd.h>
参数为两个,第一个为字符指针,第二个为获取的字符个数。返回值为字符指针,若为NULL则获取失败,成功返回参数字符指针。
三、chmod修改权限
系统调用函数chmod ( const char* path, mode_t mode)在解释mode_t时是将mode当作八进制进行解释的。
参数mode有下列数种组合: S_IRUSR 00400 文件所有者具可读取权限 S_IWUSR 00200 文件所有者具可写入权限 S_IXUSR 00100 文件所有者具可执行权限 S_IRGRP 00040 用户组具可读取权限 S_IWGRP 00020 用户组具可写入权限 S_IXGRP 00010 用户组具可执行权限 S_IROTH 00004 其他用户具可读取权限 S_IWOTH 00002 其他用户具可写入权限 S_IXOTH 00001 其他用户具可执行权限
如果将文件test的权限改为644,可以采用以下几种方法:
chmod("test",S_IRUSR|S_IWUSR|S_IRGUP|S_IROTH);
chmod("test",0644);
chmod("test",420);
将00400和00200和00040和00004进行或运算,最终得到的结果为0644(八进制),而八进制的0644就等于十进制的420。所以上面三种方法等效。
当我们给chmod系统调用函数传递参数时,它会将对应的十进制的mode参数转换为相应的八进制进行运算。所以将test文件权限改为644时,传递给chmod的参数不能直接是644,要么是八进制644即0644,或者为420。