文件操作中常用函数
1. getpwuid
- 定义:
struct passwd *getpwuid(uid_t uid);
- 功能: 根据用户ID(UID)返回与之对应的
passwd
结构体指针,该结构体包含用户的详细信息。 - 常用字段:
pw_name
: 用户名。pw_uid
: 用户ID。pw_gid
: 用户的组ID。pw_dir
: 用户的主目录。pw_shell
: 用户的登录shell。
- 用途: 查找并获取特定用户ID的用户信息。
2. getpwnam
- 定义:
struct passwd *getpwnam(const char *name);
- 功能: 根据用户名返回与之对应的
passwd
结构体指针。 - 用途: 通过用户名查找并获取该用户的详细信息。
3. getgrgid
- 定义:
struct group *getgrgid(gid_t gid);
- 功能: 根据组ID(GID)返回与之对应的
group
结构体指针,该结构体包含组的详细信息。 - 常用字段:
gr_name
: 组名。gr_gid
: 组ID。gr_mem
: 组成员列表。
- 用途: 查找并获取特定组ID的组信息。
4. getgrnam
- 定义:
struct group *getgrnam(const char *name);
- 功能: 根据组名返回与之对应的
group
结构体指针。 - 用途: 通过组名查找并获取该组的详细信息。
5. symlink
- 定义:
int symlink(const char *target, const char *linkpath);
- 功能: 创建一个指向目标文件(target)的符号链接(软链接)。
- 用途: 创建链接指向另一个文件或目录,允许以不同的路径访问相同的文件。
6. remove
- 定义:
int remove(const char *pathname);
- 功能: 删除指定路径的文件或空目录。
- 用途: 用于删除文件或目录,但仅适用于空目录。
7. rename
- 定义:
int rename(const char *oldpath, const char *newpath);
- 功能: 将文件或目录从旧路径重命名或移动到新路径。
- 用途: 更改文件或目录的名称,或移动其位置。
8. link
- 定义:
int link(const char *oldpath, const char *newpath);
- 功能: 创建一个指向已有文件的硬链接。
- 用途: 在文件系统中创建文件的多个物理路径,以共享相同的文件数据。
9. truncate
- 定义:
int truncate(const char *path, off_t length);
- 功能: 将指定文件的长度调整为给定大小。
- 用途: 用于截断或扩展文件,调整文件大小。
10. perror
- 定义:
void perror(const char *s);
- 功能: 输出一条描述上一个函数调用错误的消息。
- 用途: 用于调试和错误处理时输出错误信息。
11. strerror
- 定义:
char *strerror(int errnum);
- 功能: 返回描述错误代码
errnum
的文本字符串。 - 用途: 将错误代码转化为可读的错误消息。
12. error
- 定义:
void error(int status, int errnum, const char *format, ...);
- 功能: 打印带有可选错误消息的格式化输出,并可选择退出程序。
- 用途: 用于报告错误信息,并根据需要终止程序。
makefile工程管理工具
Makefile
基本概念
- 目标(Target): 目标通常是一个文件,比如可执行文件,目标可以依赖于其他目标或源文件。
- 依赖(Dependencies): 目标依赖于的文件或其他目标。如果依赖的文件发生变化,则需要重新构建目标。
- 命令(Commands): 完成目标的命令,通常是 shell 命令,用于编译代码、链接文件等。
Makefile
语法
target: dependencies
commands
main.o: main.c gcc -c main.c clean: rm *.o
Makefile
工作原理
# 指定编译器
CC = gcc
# 编译选项
CFLAGS = -Wall -g
# 目标可执行文件
TARGET = my_program
# 源文件
SRCS = main.c foo.c
# 目标文件(从源文件生成)
OBJS = $(SRCS:.c=.o)
# 默认目标
all: $(TARGET)
# 链接目标文件生成可执行文件
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS)
# 编译 C 源文件生成目标文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理生成的文件
clean:
rm -f $(OBJS) $(TARGET)
-
定义变量:
CC = gcc
:指定编译器。CFLAGS = -Wall -g
:编译选项,-Wall
启用所有警告,-g
启用调试信息。
-
指定目标:
TARGET = my_program
:最终生成的可执行文件名。SRCS = main.c foo.c
:项目中的源文件。OBJS = $(SRCS:.c=.o)
:根据源文件生成的目标文件列表。
-
默认目标:
all: $(TARGET)
:all
是默认目标,将编译所有内容。
-
编译和链接:
$(TARGET): $(OBJS)
:链接目标文件生成可执行文件。%.o: %.c
:通过模式匹配规则,编译.c
文件生成.o
文件。
-
清理:
clean
目标用于删除编译生成的目标文件和可执行文件,保持项目目录的整洁。
高级功能
-
自动变量:
$@
: 目标文件名。$<
: 第一个依赖文件名。$^
: 所有依赖文件的列表。
-
伪目标: 如
clean
,并不是实际生成的文件,而是用于执行某些命令的目标。 -
模式规则: 通过通配符定义适用于多种文件的规则,如
%.o: %.c
。