一、Linux系统编程核心接口
  1. 用户信息操作

    • getpwuid(uid_t uid)

      • 功能:通过用户ID(UID)查询/etc/passwd文件,获取用户信息

      • 参数:uid- 用户ID

      • 返回值:成功返回struct passwd指针,失败返回NULL

    • getpwnam(const char *name)

      • 功能:通过用户名查询用户信息

      • 参数:name- 用户名

      • 返回值:同上

  2. 组信息操作

    • getgrgid(gid_t gid)

      • 功能:通过组ID(GID)查询/etc/group文件,获取组信息

      • 参数:gid- 组ID

      • 返回值:成功返回struct group指针,失败返回NULL

    • getgrnam(const char *name)

      • 功能:通过组名查询组信息

      • 参数:name- 组名

      • 返回值:同上

  3. 结构体定义

    • 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
      };
    • struct group

      struct group {
          char   *gr_name;     // 组名
          char   *gr_passwd;   // 组密码
          gid_t   gr_gid;      // 组ID
          char  **gr_mem;      // 组成员列表(以NULL结尾)
      };
  4. 文件链接操作

    • symlink(const char *oldpath, const char *newpath)

      • 创建软链接(符号链接),oldpath指向目标文件,newpath为新链接名。

    • link(const char *oldpath, const char *newpath)

      • 创建硬链接,共享同一inode。

    • unlink(const char *pathname)

      • 删除文件或链接。

    • rename(const char *oldpath, const char *newpath)

      • 重命名文件或移动文件。

  5. 错误处理

    • errno全局变量:记录最近一次系统调用的错误码。

    • perror(const char *s):打印错误描述(含自定义前缀)。

    • strerror(int errnum):根据错误码返回错误描述字符串。

    • error(int status, int errnum, const char *format, ...):输出错误信息并退出程序。


二、文件与目录操作
  1. 标准I/O vs 文件I/O

    • 标准I/O(高层接口):基于流(FILE*),提供缓冲机制(全缓冲、行缓冲、无缓冲)。

    • 文件I/O(底层接口):基于文件描述符(int fd),直接调用系统调用(如open, read, write)。

  2. 关键函数

    • mkdir/rmdir:创建/删除目录。

    • chdir/getcwd:改变/获取当前工作目录。

    • stat/lstat/fstat:获取文件状态信息(权限、大小、时间戳等)。


三、开发工具链
  1. 编译与构建

    • gcc:C编译器,支持预处理、编译、汇编、链接全流程。

    • make/Makefile:自动化构建工具,通过规则定义编译依赖关系。

  2. 调试与分析

    • gdb:GNU调试器,支持断点、单步执行、变量查看等功能。

    • strace:跟踪系统调用和信号。


四、终端颜色控制
  1. ANSI转义序列

    • 格式:\033[显示方式;前景色;背景色m

      • 显示方式:0(默认)、1(高亮)、4(下划线)等。

      • 前景色:30(黑)~37(白)。

      • 背景色:40(黑)~47(白)。

    • 示例:

      printf("\033[1;31;40m 红色文字 \033[0m");  // 高亮红色字,黑色背景
      printf("\033[0m");                      // 恢复默认样式

五、其他关键概念
  1. 动态库与静态库

    • .so(共享对象):动态链接库,运行时加载。

    • .a(归档文件):静态库,编译时链接。

  2. 进程与文件管理

    • fork()/exec():创建子进程并执行新程序。

    • wait()/waitpid():等待子进程结束。


六、示例代码片段
// 获取用户信息
struct passwd *user = getpwnam("zhaosi");
if (user) {
    printf("User: %s, UID: %d, Home: %s\n", 
           user->pw_name, user->pw_uid, user->pw_dir);
}

// 错误处理
FILE *fp = fopen("file.txt", "r");
if (!fp) {
    perror("fopen failed");  // 输出: fopen failed: No such file...
    exit(EXIT_FAILURE);
}

结构化总结

  • 核心模块:用户/组管理、文件操作、错误处理、开发工具、终端交互。

  • 关键点:通过系统调用与标准库结合实现功能,注重错误处理与资源释放。

  • 应用场景:系统级程序开发、脚本编写、终端界面美化。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐