Linux中的系统调用和函数

以下是对 Linux 系统调用和函数的详细介绍:

1. 用户和组信息相关函数

 `getpwuid`
功能:根据用户 ID 获取用户的密码文件信息(即用户账户信息)。

声明:

#include <pwd.h>
struct passwd *getpwuid(uid_t uid);
 

参数:
- `uid`:用户的用户 ID(UID)。

返回值:
- 成功时,返回指向 `struct passwd` 结构体的指针。
- 失败时,返回 `NULL`。

`struct passwd` 结构体:

struct passwd {
    char *pw_name;    // 用户名
    char *pw_passwd;  // 用户密码(通常是一个加密的口令)
    uid_t pw_uid;     // 用户 ID
    gid_t pw_gid;     // 主组 ID
    char *pw_gecos;   // 用户的全名和其他信息
    char *pw_dir;     // 用户的主目录
    char *pw_shell;   // 用户的登录 shell
};
 

示例:

#include <stdio.h>
#include <pwd.h>

int main() {
    uid_t uid = 1000; // 示例用户 ID
    struct passwd *pw = getpwuid(uid);
    if (pw) {
        printf("Username: %s\n", pw->pw_name);
        printf("Home Directory: %s\n", pw->pw_dir);
    } else {
        perror("getpwuid");
    }
    return 0;
}
 

 `getpwnam`
功能:根据用户名获取用户的密码文件信息。

声明:

#include <pwd.h>
struct passwd *getpwnam(const char *name);
 

参数:
- `name`:用户名。

**返回值**:
- 成功时,返回指向 `struct passwd` 结构体的指针。
- 失败时,返回 `NULL`。

**示例**:

#include <stdio.h>
#include <pwd.h>

int main() {
    const char *username = "user";
    struct passwd *pw = getpwnam(username);
    if (pw) {
        printf("User ID: %d\n", pw->pw_uid);
        printf("Home Directory: %s\n", pw->pw_dir);
    } else {
        perror("getpwnam");
    }
    return 0;
}
 

 `getgrgid`
功能:根据组 ID 获取组的密码文件信息(即组账户信息)。

声明:

#include <grp.h>
struct group *getgrgid(gid_t gid);
 

参数:
- `gid`:组 ID(GID)。

**返回值**:
- 成功时,返回指向 `struct group` 结构体的指针。
- 失败时,返回 `NULL`。

`struct group` 结构体:

struct group {
    char *gr_name;   // 组名
    char *gr_passwd; // 组密码(通常是一个加密的口令)
    gid_t gr_gid;    // 组 ID
    char **gr_mem;   // 组成员列表
};
 

示例:

#include <stdio.h>
#include <grp.h>

int main() {
    gid_t gid = 1000; // 示例组 ID
    struct group *grp = getgrgid(gid);
    if (grp) {
        printf("Group Name: %s\n", grp->gr_name);
    } else {
        perror("getgrgid");
    }
    return 0;
}
 

`getgrnam`
功能:根据组名获取组的密码文件信息。

声明:

#include <grp.h>
struct group *getgrnam(const char *name);
 

参数:
- `name`:组名。

返回值:
- 成功时,返回指向 `struct group` 结构体的指针。
- 失败时,返回 `NULL`。

示例:

#include <stdio.h>
#include <grp.h>

int main() {
    const char *groupname = "staff";
    struct group *grp = getgrnam(groupname);
    if (grp) {
        printf("Group ID: %d\n", grp->gr_gid);
    } else {
        perror("getgrnam");
    }
    return 0;
}
 

2. 文件和链接操作相关函数

`symlink`
功能:创建一个符号链接(软链接)。

声明:

#include <unistd.h>
int symlink(const char *target, const char *linkpath);
 

参数:
- `target`:符号链接指向的目标文件或目录的路径。
- `linkpath`:符号链接的路径。

返回值:
- 成功时返回 `0`。
- 失败时返回 `-1`,并设置 `errno`。

示例:

#include <stdio.h>
#include <unistd.h>

int main() {
    if (symlink("target_file", "symlink_name") == -1) {
        perror("symlink");
    }
    return 0;
}
 

 `remove`
功能:删除一个文件或空目录。

声明:

#include <stdio.h>
int remove(const char *filename);
 

参数:
- `filename`:要删除的文件或空目录的路径。

返回值:
- 成功时返回 `0`。
- 失败时返回 `-1`,并设置 `errno`。

示例:

#include <stdio.h>

int main() {
    if (remove("file_to_remove") == -1) {
        perror("remove");
    }
    return 0;
}
 

`rename`
功能:重命名文件或目录(相当于移动文件或目录)。

声明:

#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
 

参数:
- `oldpath`:原路径(文件或目录的当前路径)。
- `newpath`:新路径(新的文件或目录路径)。

返回值:
- 成功时返回 `0`。
- 失败时返回 `-1`,并设置 `errno`。

示例:

#include <stdio.h>

int main() {
    if (rename("old_name", "new_name") == -1) {
        perror("rename");
    }
    return 0;
}
 

`link`
功能:创建一个硬链接。

声明:

#include <unistd.h>
int link(const char *oldpath, const char *newpath);
 

参数:
- `oldpath`:已有文件的路径。
- `newpath`:新硬链接的路径。

返回值:
- 成功时返回 `0`。
- 失败时返回 `-1`,并设置 `errno`。

示例:

#include <stdio.h>

int main() {
    if (link("existing_file", "new_hard_link") == -1) {
        perror("link");
    }
    return 0;
}
 

`truncate`
功能:调整文件的大小。如果文件的大小变小,多余的部分将被丢弃;如果变大,则文件的内容将被填充为零。

声明:

#include <unistd.h>
int truncate(const char *path, off_t length);
 

参数:
- `path`:要调整大小的文件路径。
- `length`:新文件大小(以字节为单位)。

返回值:
- 成功时返回 `0`。
- 失败时返回 `-1`,并设置 `errno`。

示例:

#include <stdio.h>
#include <unistd.h>

int main() {
    if (truncate("file_to_truncate", 100) == -1) {
        perror("truncate");
    }
    return 0;
}
 

 总结

- 用户和组信息函数:`getpwuid`、`getpwnam`、`getgrgid` 和 `getgrnam` 用于获取用户和组的详细信息。
- 文件和链接操作函数:`symlink`、`remove`、`rename`、`link` 和 `truncate` 用于操作文件和目录,包括创建链接、删除文件、重命名文件、创建硬链接和调整文件大小。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值