前言
如果,想要深入的学习C标准库函数中的mkfifo函数,还是需要去自己阅读Linux系统中的帮助文档。
具体输入命令:
man 3 mkfifo
即可查阅到完整的资料信息。
fgets函数
fgets 是 C 标准库中的一个函数,用于从文件或输入流中读取一行字符串。
它的函数原型如下:
#include //需导入此头文件char *fgets(char *str, int n, FILE *stream);
参数说明:
- str:指向一个字符数组的指针,用于存储从文件或输入流中读取的字符串。
- n:要读取的最大字符数(包括空字符 ‘\0’)。通常设置为字符数组的大小。
- stream:指向一个 FILE 类型的指针,表示从哪个文件或输入流中读取字符串。常见的输入流有 stdin(标准输入),也可以是通过 fopen 函数打开的文件。
返回值:
- 如果成功,fgets 返回传入的 str 指针。
- 如果到达文件末尾(EOF)或发生错误,fgets 返回 NULL。
- fgets 函数从指定的输入流中读取字符,直到遇到换行符(‘\n’)、到达文件末尾(EOF)或读取到 n-1 个字符。读取的字符串会以空字符 (‘\0’) 结尾。如果读取到换行符,它也会被存储在字符串中。
以下是使用 fgets 函数的一个示例:
#include int main() {char buffer[100];printf("请输入一行字符串:");fgets(buffer, sizeof(buffer), stdin); // 从标准输入读取字符串printf("你输入的字符串是:%s", buffer);return 0;}
在这个示例中,我们使用 fgets 从标准输入(键盘)读取一行字符串,并将其存储在 buffer 字符数组中。然后我们将读取到的字符串打印到屏幕上。
注意:fgets 函数与 gets 函数类似,但 gets 函数在读取字符串时不检查缓冲区的大小,可能导致缓冲区溢出。因此,使用 fgets 函数通常更安全,推荐使用。
scanf函数
scanf 是 C 标准库中的一个函数,用于从标准输入(通常是键盘)按照指定格式读取数据。
它的函数原型如下:
#include //使用时需导入此头文件int scanf(const char *format, ...);
参数说明:
- format:一个指向格式字符串的指针。格式字符串定义了要读取的数据类型及其顺序。
- …:可变参数列表,表示指向存储读取数据的变量的指针。这些指针的类型和数量应与 format 参数中的格式说明符相对应。
返回值:
scanf 函数返回成功匹配并读取的输入项数。如果到达文件末尾(EOF)或发生错误,返回 EOF。
格式字符串中可以包含以下部分:格式说明符:以 % 开头的字符序列,用于指定要读取的数据类型。例如:
- %d:读取一个整数。
- %f:读取一个浮点数。
- %c:读取一个字符。
- %s:读取一个字符串(遇到空白字符停止)。
- %lf:读取一个双精度浮点数。
空白字符:空格、制表符或换行符。在输入中跳过任意数量的空白字符。
普通字符:除格式说明符和空白字符外的其他字符。它们必须与输入中的字符精确匹配。
以下是使用 scanf 函数的一个示例:
#include int main() {int age;float height;char name[50];printf("请输入您的名字、年龄和身高(用空格隔开):");scanf("%s %d %f", name, &age, &height); // 从标准输入读取数据printf("您的名字是:%s\n", name);printf("您的年龄是:%d\n", age);printf("您的身高是:%.2f\n", height);return 0;}
在这个示例中,我们使用 scanf 从标准输入(键盘)读取名字、年龄和身高,并将它们分别存储在变量 name、age 和 height 中。然后我们将读取到的数据打印到屏幕上。
注意:scanf 在读取字符串时可能导致缓冲区溢出。为了避免这种情况,可以使用 %ns(n 为整数)格式说明符限制读取的字符数。另外,当读取字符串时,可能更倾向于使用 fgets 函数,因为它更安全。
fgets函数与scanf函数的区别
fgets 和 scanf 函数都是 C 标准库中用于读取输入的函数,但它们之间存在一些重要区别。
读取方式:
- fgets:它从文件或输入流中读取一行字符串,直到遇到换行符(‘\n’)或到达文件末尾(EOF)。换行符(如果存在)也会被存储在结果字符串中。
- scanf:它根据指定的格式字符串从文件或输入流中读取数据。scanf 在遇到空格、制表符或换行符时会停止读取,这些分隔符不会被存储在结果字符串中。
安全性:
- fgets:它要求指定缓冲区的大小,从而避免缓冲区溢出。这使得 fgets 在读取字符串时更安全。
- scanf:当使用 %s 格式字符串读取字符串时,scanf 不检查缓冲区的大小,可能导致缓冲区溢出。为了避免这种情况,可以使用 %ns(n 为整数)限制读取的字符数。
输入流:
- fgets:它可以从任意 FILE 类型的指针(例如 stdin 或通过 fopen 打开的文件)读取数据。
- scanf:它可以使用 fscanf 变体从文件读取数据,但通常用于从 stdin(标准输入)读取数据。
灵活性:
- fgets:它仅用于读取字符串。
- scanf:它可以根据格式字符串读取多种类型的数据(例如整数、浮点数、字符等)。
总之,fgets 更适合安全地读取字符串,尤其是当输入可能包含空格时。而 scanf 则更适用于根据特定格式读取多种类型的数据。在使用 scanf 时,应确保正确处理缓冲区大小,以避免溢出。
getchar 函数
getchar() 是标准 C 库函数中的一个函数,
它用于从标准输入设备(通常是键盘)读取一个字符
。这个函数是 stdio.h 头文件的一部分。getchar() 函数不需要任何参数,并在读取一个字符后将其作为整数值返回。如果读取失败或到达文件末尾,getchar() 会返回一个特殊的常量 EOF(End Of File),它通常表示为 -1。
下面是一个简单的 getchar() 函数示例:
c
Copy code
#include
int main() {
int ch;
printf("请输入一个字符:");ch = getchar();printf("您输入的字符是:%c\n", ch);return 0;
}
在这个示例中,我们首先包含了 stdio.h 头文件,然后在 main() 函数内部定义了一个名为 ch 的整数变量。接下来,我们使用 printf() 函数提示用户输入一个字符。然后,我们调用 getchar() 函数,并将其返回值存储在 ch 变量中。最后,我们使用 printf() 函数输出用户输入的字符。
需要注意的是,当你使用 getchar() 函数时,它会读取所有输入,包括空格、制表符和换行符。如果你想要忽略这些字符,可以使用循环来过滤它们,如下所示:
c
Copy code
#include
int main() {
int ch;
printf("请输入一个字符:");while ((ch = getchar()) != EOF && (ch == ' ' || ch == '\t' || ch == '\n')) {// 忽略空格、制表符和换行符}printf("您输入的字符是:%c\n", ch);return 0;
}
这个示例中,我们使用了一个循环来检查输入的字符是否为空格、制表符或换行符。如果是这些字符,就会继续读取下一个字符,直到遇到非空白字符或到达文件末尾。