异常处理(二)

 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 }

 

posted @ 2022-10-31 07:48  add_oil  阅读(20)  评论(0编辑  收藏  举报