Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
POSIX
POSIX中文使用示例指南
发布于 2023-04-14 14:55:25 浏览:1466
订阅该版
[tocm] ### 最近有POSIX需求,所以写了一份中文示例手册,示例均为标准POSIX接口,可直接跑... - 文档还在完善中,所以这里只贴出部分,完整文档放在[github仓库链接](https://github.com/Yaochenger/Yaochenger-POSIX-Guide) - 这个文章估计会越来越大,喜欢的小伙伴可以导出为pdf快速查看 #### 进入正题... # POSIX接口标准示例笔记 ## 1 ctype.h ### 1.1 isalnum() isalnum()函数用于测试字符,如果字符是**字母**或**数字**,则返回非零值(即真),否则返回零(即假)。isalnum()函数在许多场景中非常有用,特别是在字符串处理中。以下是一个示例代码: ```c #include
#include
int main() { char str[] = "YouBot is awesome! 123"; int i = 0; while(str[i]) { if (isalnum(str[i])) { printf("'%c' is an alphanumeric character\n", str[i]); } else { printf("'%c' is not an alphanumeric character\n", str[i]); } i++; } return 0; } ``` 在这个示例中,我们通过循环遍历给定的字符串,并使用isalnum()函数测试每个字符。如果字符是字母或数字,我们打印一条消息表示它是一个字母数字字符,否则我们打印一条消息表示它不是字母数字字符。这是一个常见的用例场景,可用于验证用户输入的密码是否只包含字母和数字。 ### 1.2 isapha() isalpha()函数用于测试字符,**如果字符是字母**(A-Z或a-z),则返回非零值(即真),否则返回零(即假)。以下是一个示例代码: ```c #include
#include
int main() { char ch; printf("Enter any character: "); scanf("%c", &ch); if(isalpha(ch)) { printf("%c is an alphabet.", ch); } else { printf("%c is not an alphabet.", ch); } return 0; } ``` 在这个示例中,我们从用户读取一个字符并使用isalpha()函数测试它是否为字母字符。如果字符是字母字符,我们打印一条消息表示它是字母字符,否则我们打印一条消息表示它不是字母字符。这是一个常见的用例场景,可用于验证用户输入是否是字母字符。 isalpha()函数是C语言中对字符分类和操作功能的一个基本函数之一,通常与其他函数,例如isdigit()和isalnum()等一起使用,以执行更复杂的操作。 ### 1.3 isblank() isblank()函数是ctype.h头文件中定义的函数之一,用于测试一个字符是否为空格字符。 具体来说,isblank()函数用于测试字符,如果字符为空格字符(空格或制表符),则返回非零值(即真),否则返回零(即假)。以下是一个示例代码: ```c #include
#include
int main() { char ch1 = ' '; char ch2 = 'A'; if(isblank(ch1)) { printf("%c is a blank character.", ch1); } else { printf("%c is not a blank character.", ch1); } printf("\n"); if(isblank(ch2)) { printf("%c is a blank character.", ch2); } else { printf("%c is not a blank character.", ch2); } return 0; } ``` 在这个示例中,我们测试了两个不同的字符,一个是空格字符,另一个是字母字符。如果字符是空格字符,我们打印一条消息表示它是空格字符,否则我们打印一条消息表示它不是空格字符。 isblank()函数是一个典型的C语言函数,用于执行字符分类和操作任务。它可与其他函数,例如isalpha()、isdigit()和isalnum()等一起使用,以执行更复杂的字符操作。 ### 1.4 iscntrl() iscntrl()函数是ctype.h头文件中定义的函数之一,用于测试一个字符是否为控制字符。 控制字符是一些不能显示在屏幕上的字符,常见的控制字符包括制表符、换行符、回车符等等。iscntrl()函数用于测试一个字符是否为控制字符,如果字符是控制字符,则返回非零值(即真),否则返回零(即假)。 以下是一个示例代码: ```c #include
#include
int main() { char ch1 = '\n'; char ch2 = 'A'; if(iscntrl(ch1)) { printf("%c is a control character.", ch1); } else { printf("%c is not a control character.", ch1); } printf("\n"); if(iscntrl(ch2)) { printf("%c is a control character.", ch2); } else { printf("%c is not a control character.", ch2); } return 0; } ``` 在这个示例中,我们测试了两个不同的字符,一个是换行符,另一个是字母字符。如果字符是控制字符,我们打印一条消息表示它是控制字符,否则我们打印一条消息表示它不是控制字符。 iscntrl()函数是C语言中对字符分类和操作功能的一个基本函数之一,通常与其他函数,例如isalpha()、isdigit()和isalnum()等一起使用,以执行更复杂的操作。 ### 1.5 isdigit() 在 POSIX 标准中,isdigit()函数是C语言ctype.h头文件中一个用于判断字符是否为数字字符(字符0-9)的函数。如果字符是一个数字,则返回一个非零值(即真),否则返回零(即假)。 示例代码: ```c #include
#include
int main() { char ch1 = '1'; char ch2 = 'A'; if(isdigit(ch1)) { printf("%c is a digit character.", ch1); } else { printf("%c is not a digit character.", ch1); } printf("\n"); if(isdigit(ch2)) { printf("%c is a digit character.", ch2); } else { printf("%c is not a digit character.", ch2); } return 0; } ``` 在这个示例中,我们测试了两个不同的字符,一个是数字字符,另一个是字母字符。如果字符是数字字符,我们打印一条消息表示它是数字字符,否则我们打印一条消息表示它不是数字字符。 总之,isdigit()函数是C语言中用于操作字符的最基本和常用的函数之一,在处理字符和字符串时非常有用。 ### 1.6 isgraph() 在 POSIX 标准中,isgraph()函数是C语言ctype.h头文件中的一个函数,用于检查一个字符是否是可打印的图形字符。 具有图形表示的字符是指可以显示在屏幕上的字符,除了空格和控制字符外,所有的字符都属于这个范畴。isgraph()函数会判断一个字符是否是可打印图形字符,如果是,则返回一个非零值(即真),否则返回零(即假)。 下面是一个示例代码: ```c #include
#include
int main() { char ch1 = '\n'; char ch2 = 'A'; if(isgraph(ch1)) { printf("%c is a graph character.", ch1); } else { printf("%c is not a graph character.", ch1); } printf("\n"); if(isgraph(ch2)) { printf("%c is a graph character.", ch2); } else { printf("%c is not a graph character.", ch2); } return 0; } ``` 在这个示例中,我们测试了两个不同的字符,一个是换行符,另一个是字母字符。如果字符是可打印的图形字符,我们打印一条消息表示它是图形字符,否则我们打印一条消息表示它不是图形字符。 总之,isgraph()函数是C语言中用于操作字符的另一个基本函数,在处理字符和字符串时非常有用。和其他ctype.h头文件中的函数,例如isdigit()、isalpha()和isalnum()等一起使用,以执行更复杂的操作。 ### 1.7 islower() islower()函数是C语言ctype.h头文件中的一个函数,用于检查传入的字符是否是小写字母。 如果字符是小写字母,则该函数返回一个非零值(即真),否则返回零(即假)。该函数只检查字符的 ASCII 值,如果字符不是小写字母,则返回假。以下是一个示例代码: ```c #include
#include
int main() { char ch1 = 'a'; char ch2 = 'A'; if(islower(ch1)) { printf("%c is a lowercase letter.", ch1); } else { printf("%c is not a lowercase letter.", ch1); } printf("\n"); if(islower(ch2)) { printf("%c is a lowercase letter.", ch2); } else { printf("%c is not a lowercase letter.", ch2); } return 0; } ``` 在这个示例中,我们测试了两个不同的字符,一个是小写字母,另一个是大写字母。如果字符是小写字母,我们打印一条消息表示它是小写字母,否则我们打印一条消息表示它不是小写字母。 值得注意的是,另外还有一个 isupper() 函数,它是用来检查一个字符是否是大写字母的,该函数的使用方法和 islower() 函数一样。 在 Python 中,也有一个字符串方法 islower(),用于检查字符串中的所有字母是否都是小写字母。该方法返回一个布尔值,True 表示所有字母都是小写字母,False 则表示至少有一个不是小写字母。 ### 1.8 isprint() 略 ### 1.9 ispunct() 在 POSIX 标准中,ispunct()是C语言 ctype.h头文件中的一个函数,用于检查传入的字符是否是一个标点符号。 如果字符是标点符号,则该函数返回一个非零值(即真),否则返回零(即假)。 以下是一个示例代码: ```c #include
#include
int main() { char c1 = '.'; char c2 = 'a'; if (ispunct(c1)) { printf("%c is a punctuation mark.\n", c1); } else { printf("%c is not a punctuation mark.\n", c1); } if (ispunct(c2)) { printf("%c is a punctuation mark.\n", c2); } else { printf("%c is not a punctuation mark.\n", c2); } return 0; } ``` 在此示例中,我们使用ispunct()函数测试两个不同的字符,字符'.'是标点符号,而字符'a'不是标点符号。如果字符是标点符号,则打印一条消息表示它是标点符号,否则打印一条消息表示它不是。 总之,ispunct()函数是C语言中用于操作字符的另一个基本函数,在字符串和文本处理中使用非常广泛。和其他ctype.h头文件中的函数,例如isdigit()、isalpha()和isalnum()等一起使用,以执行更复杂的操作。 ### 1.10 isspace() POSIX标准中的 isspace() 函数是一个用于检查一个字符是否为空格字符的函数,它定义在 cctype.h 头文件中。如果字符是空格字符,则该函数返回一个非零值(即真),否则返回零(即假)。 以下是一个在 C++ 中使用 isspace() 函数的示例代码: ```c++ #include
#include
using namespace std; int main() { char ch = ' '; if (isspace(ch)) { cout << "该字符是空格\n"; } else { cout << "该字符不是空格\n"; } return 0; } ``` 在这个示例中,我们定义了一个字符变量 ch,然后使用 isspace() 函数检查该字符是否为空格字符。如果检测到该字符是空格字符,则输出一条消息表示该字符是空格字符,否则输出一条消息表示该字符不是空格字符。 在 POSIX 标准中,还包括了用于检查空格字符的 isspace_l() 函数,该函数与 isspace() 函数的功能相同,但可以指定地域设置来检查字符是否为空格字符。 总之,isspace() 函数是 C++ 中用于操作字符的一种基本函数,它可以用来检查一个字符是否为空格字符。 > ps: isspace()相比isblank判断的范围更加广一些 ### 1.11 issupper() 在 POSIX C 标准中, issupper() 函数是用于检查一个字符是否为大写字母的函数。该函数定义在 ctype.h 头文件中,并返回一个非零值(即真)或零(即假),表示字符是否是大写字母。此函数仅检查字母字符,而不检查空格、数字或符号。 以下是一个使用 issupper() 函数的示例代码: ```c #include
#include
int main() { char ch = 'A'; if (issupper(ch)) { printf("该字符是大写字母\n"); } else { printf("该字符不是大写字母\n"); } return 0; } ``` 这个示例中,我们定义了一个字符变量 ch,然后使用 issupper() 函数检查该字符是否是大写字母。如果该字符是大写字母,则输出一条消息表示该字符是大写字母,否则输出一条消息表示该字符不是大写字母。 总之, issupper() 函数是 POSIX C 标准中用于检查一个字符是否为大写字母的函数,常用于处理字符和文本数据。 ### 1.12 isxdigit() 在 POSIX C 标准中,isxdigit() 函数用于检查一个字符是否为十六进制数字字符。该函数定义在 ctype.h 头文件中,并返回一个非零值(即真)或零(即假),表示字符是否为十六进制数字字符。注意,该函数只检查字母字符,不检查空格、数字或符号。 以下是一个使用 isxdigit() 函数的示例代码: ```c #include
#include
int main() { char ch = 'A'; if (isxdigit(ch)) { printf("该字符是十六进制数字字符\n"); } else { printf("该字符不是十六进制数字字符\n"); } return 0; } ``` 在这个示例中,我们定义了一个字符变量 ch,然后使用 isxdigit() 函数检查该字符是否为十六进制数字字符。如果该字符是十六进制数字字符,则输出一条消息表示该字符是十六进制数字字符,否则输出一条消息表示该字符不是十六进制数字字符。 总之,在 POSIX C 标准中,isxdigit() 函数是用于检查一个字符是否为十六进制数字字符的函数,常用于处理字符和文本数据。 ### 1.13 tolower() 在 POSIX C 标准中,tolower() 函数用于将大写字母转换为相应的小写字母。该函数在 ctype.h 头文件中定义,它接受一个整型参数,表示要转换为小写字母的字符。 返回值是对应的小写字母。如果传递给 tolower() 函数的参数不是大写字母,则函数返回原始字符。 下面是在 POSIX C 中使用 tolower() 函数的示例代码: ```c #include
#include
int main() { char ch = 'A'; char lowercase_ch = tolower((int) ch); printf("%c 转换为小写字母是 %c\n", ch, lowercase_ch); return 0; } ``` 这段代码将输出 "A 转换为小写字母是 a", 它就展示了如何将大写字母转换为小写字母。 在问题描述中提到可能会遇到程序崩溃的情况,请注意确保您传递给 tolower() 函数的是正确的参数类型。参数类型必须是整型,而不是字符型。如果传递给该函数的参数是字符型,则必须通过强制转换将其转换为整型,如上面的代码所示。 总之,在 POSIX C 中,tolower() 函数是将大写字母字符转换为小写字母字符的函数,常用于处理文本数据。但在使用该函数时需要注意参数类型的正确性,以避免程序崩溃。 ### 1.14 toupper() 在 POSIX C 标准中,toupper() 函数也定义在 ctype.h 头文件中,它接受一个整型参数,表示要转换为大写字母的字符,并返回相应的大写字母。如果传递给 toupper() 函数的参数不是小写字母,则函数返回原始字符。 下面是在 POSIX C 中使用 toupper() 函数的示例代码: ```c #include
#include
int main() { char ch = 'a'; char uppercase_ch = toupper((int) ch); printf("%c 转换为大写字母是 %c\n", ch, uppercase_ch); return 0; } ``` 这段代码将输出 "a 转换为大写字母是 A", 它就展示了如何将小写字母转换为大写字母。 与 tolower() 函数类似,当使用 toupper() 函数时,需要确保传递给该函数的参数类型是整型,而不是字符型。如果传递给该函数的参数是字符型,则必须通过强制转换将其转换为整型。 总之,在 POSIX C 中,toupper() 函数是将小写字母字符转换为大写字母字符的函数,常用于处理文本数据。 ## 2 errno.h ### 2.1 errno() 在 C 语言中,errno 是一个由标准 C 库中的头文件 errno.h 定义的全局变量。errno 变量存储着最后一次的错误代码。当通过系统调用或库函数执行操作失败时,errno 变量会被设置为一个非零值,反映导致失败的原因。在这种情况下,程序员可以通过检查 errno 变量的值来了解错误的原因,并采取必要的措施。 在使用 errno 变量时,程序员通常需要获得与 errno 变量对应的错误消息。这可以通过使用 strerror() 函数来实现。strerror() 函数可以将 errno 变量的值作为输入,然后返回一个指向对应错误消息的字符串指针。 以下是一个演示如何使用 errno 变量和 strerror() 函数的示例代码: ```c #include
#include
#include
int main() { FILE *fp = fopen("non-existent-file.txt", "r"); if(fp == NULL) { printf("打开文件失败: %s\n", strerror(errno)); return 1; } //... fclose(fp); return 0; } ``` 在这个示例中,当 fopen() 函数未能打开名为 "non-existent-file.txt" 的文件时,它将返回 NULL 并设置 errno 为 ENOENT。程序员可以使用 strerror() 函数检索该错误,并相应地处理错误情况。在这个示例中,程序员可以从 stderr 输出中读取以下错误消息: 打开文件失败: No such file or directory 因此,将 strerror() 与 errno 结合使用将使应用程序实现更好的错误报告和处理机制。 In conclusion,在 C 语言中,errno 变量是一个重要的变量,提供了一种检查程序中错误发生原因的简便方法,程序员可以通过 strerror() 函数来检索与 errno 变量对应的错误消息。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
rv666
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
文章
20
回答
60
被采纳
9
关注TA
发私信
相关文章
1
移植rt-thread2.1.0缺少components/pthreads里的posix_types.h文件中包含的sy
2
[征集自愿者] POSIX相关章节文档编写
3
RT-Thread POSIX支持
4
POSIX标准接口针对文件系统没有导出fsync
5
POSIX接口的select还没实现?
6
pthread 组建bug反馈
7
RTT中的POSIX支持
8
RT-Thread 如何用POSIX接口
9
使用 RT_USING_POSIX finsh能显示,但不能输入
10
请教、讨论POSIX接口、dfs中的pos和size问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部