前言

如果,想要深入的学习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;

}
这个示例中,我们使用了一个循环来检查输入的字符是否为空格、制表符或换行符。如果是这些字符,就会继续读取下一个字符,直到遇到非空白字符或到达文件末尾。