异常处理(二)
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 }