creat系统调用及示例

creat - 创建文件

函数介绍

creat系统调用用于创建新文件或截断已存在的文件。它是一个简化的文件创建函数,等价于open(path, O_WRONLY|O_CREAT|O_TRUNC, mode)。

函数原型

1
2
3
4
5
6
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

int creat(const char *pathname, mode_t mode);

功能

创建新文件或清空已存在的文件,返回只写权限的文件描述符。

参数

  • const char *pathname: 要创建的文件路径名

  • mode_t mode: 文件权限模式(如0644)

返回值

  • 成功时返回文件描述符(非负整数)

  • 失败时返回-1,并设置errno

特殊限制

  • 文件总是以只写模式打开

  • 如果文件已存在,会被截断为0字节

  • 不支持追加模式等高级选项

相似函数

  • open(): 更灵活的文件打开函数

  • mkstemp(): 创建安全的临时文件

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
https://www.calcguide.tech/2025/08/08/creat系统调用及示例/#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>

int main() {
int fd;

printf("=== Creat函数示例 ===\n");

// 示例1: 基本文件创建
printf("示例1: 基本文件创建\n");
fd = creat("test_creat.txt", 0644);
if (fd == -1) {
perror("创建文件失败");
} else {
printf("成功创建文件,fd=%d\n", fd);
write(fd, "Hello from creat!", 17);
close(fd);
}

// 示例2: 重复创建(会截断原文件)
printf("示例2: 重复创建(截断原文件)\n");
fd = creat("test_creat.txt", 0644);
if (fd != -1) {
printf("重新创建文件(原内容被清空)\n");
write(fd, "New content", 11);
close(fd);
}

// 示例3: 权限测试
printf("示例3: 不同权限创建\n");
int fd1 = creat("file_600.txt", 0600); // 仅所有者读写
int fd2 = creat("file_644.txt", 0644); // 所有者读写,其他用户读
int fd3 = creat("file_666.txt", 0666); // 所有用户读写

if (fd1 != -1) {
printf("创建0600权限文件\n");
close(fd1);
}
if (fd2 != -1) {
printf("创建0644权限文件\n");
close(fd2);
}
if (fd3 != -1) {
printf("创建0666权限文件\n");
close(fd3);
}

// 清理测试文件
unlink("test_creat.txt");
unlink("file_600.txt");
unlink("file_644.txt");
unlink("file_666.txt");

return 0;
}

https://www.calcguide.tech/2025/08/08/creat系统调用及示例/

data-ad-format="fluid" data-ad-layout-key="-7k+ex-4a-9w+4a">

https://www.calcguide.tech/2025/08/26/linux开源软件路线图/

data-ad-format="auto" data-full-width-responsive="true">