Linux的一些库函数和系统调用

文章目录

                一、字符串的分割函数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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值