1 // 错误码的返回方式一:pathname/flags/mode为入参;fd为出参,存储打开的文件句柄。
2 int open(const char *pathname, int flags, mode_t mode, int* fd) {
3 if (/*文件不存在*/) {
4 return EEXIST;
5 }
6
7 if (/*没有访问权限*/) {
8 return EACCESS;
9 }
10
11 if (/*打开文件成功*/) {
12 return SUCCESS; // C语言中的宏定义:#define SUCCESS 0
13 }
14 // ...
15 }
16 //使用举例
17 int fd;
18 int result = open(“c:\test.txt”, O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO, &fd);
19 if (result == SUCCESS) {
20 // 取出fd使用
21 } else if (result == EEXIST) {
22 //...
23 } else if (result == EACESS) {
24 //...
25 }
26
27
28 // 错误码的返回方式二:函数返回打开的文件句柄,错误码放到errno中。
29 int errno; // 线程安全的全局变量
30 int open(const char *pathname, int flags, mode_t mode){
31 if (/*文件不存在*/) {
32 errno = EEXIST;
33 return -1;
34 }
35
36 if (/*没有访问权限*/) {
37 errno = EACCESS;
38 return -1;
39 }
40
41 // ...
42 }
43 // 使用举例
44 int hFile = open(“c:\test.txt”, O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);
45 if (-1 == hFile) {
46 printf("Failed to open file, error no: %d.\n", errno);
47 if (errno == EEXIST ) {
48 // ...
49 } else if(errno == EACCESS) {
50 // ...
51 }
52 // ...
53 }