函数
A开头
atoi()函数
atoi
函数是 C 标准库 <stdlib.h>
中的一个函数,用于将字符串转换为整数(int)类型。它的原型如下:
int atoi(const char *str);
其中:
str
是要转换的字符串,必须以数字开头,可以包含可选的符号(+ 或 -)和数字字符。
atoi
函数会从字符串开头开始扫描,忽略前导空格,直到遇到非空格字符为止。然后它将尽可能多的连续数字字符解释为整数表示,并返回结果。如果字符串的第一个非空字符不是数字字符或正负号,则 atoi
返回零。
请注意,atoi
函数没有提供错误检测或处理功能。如果输入字符串不是有效的整数表示,那么结果可能是未定义的。通常情况下,如果需要更严格的错误处理或者需要转换更大范围的整数,可以考虑使用 strtol
函数。
C开头
close()函数
close
是一个 C 标准库函数,用于关闭一个打开的文件描述符。它的原型定义在 <unistd.h>
头文件中。
以下是 close
函数的原型:
#include <unistd.h> int close(int fd);
其中:
fd
是要关闭的文件描述符。
close
函数关闭指定的文件描述符,并释放与该文件描述符相关联的所有资源。如果成功关闭文件,close
返回 0;如果发生错误,返回 -1,并设置 errno
来指示错误的类型。
以下是一个简单的示例,演示如何使用 open
和 close
函数打开并关闭一个文件:
#include <stdio.h> #include <fcntl.h>
#include <unistd.h> int main() {
int fd;
// 打开一个文件
fd = open("example.txt", O_RDONLY);
if (fd == -1) { perror("open");
return 1; }
// 在这里进行文件操作...
// 关闭文件
if (close(fd) == -1) {
perror("close");
return 1; }
return 0; }
在这个示例中,程序打开一个名为 "example.txt" 的文件,进行一些文件操作,然后关闭文件。如果 close
函数返回 -1,程序将打印出错误信息。
F开头
fgets()函数
fgets
是 C 语言中用于从文件流中读取一行文本的函数。它的原型通常如下:
char *fgets(char *str, int n, FILE *stream);
str
:是一个指向字符数组的指针,用于存储读取到的文本。n
:是要读取的字符数的最大值,包括末尾的空字符。stream
:是一个指向FILE
结构的指针,指定要从中读取的文件流。
fgets
函数会从指定的文件流中读取一行文本,并将其存储到 str
所指向的字符数组中,直到读取到换行符(包括换行符)或文件结束符为止。读取到的文本会被 null 终止,确保字符串的正确终止。
如果成功读取了一行文本,则返回 str
的指针。如果到达文件结束或发生了读取错误,则返回 NULL
。例如,下面的代码片段演示了如何使用 fgets
函数从标准输入中读取一行文本:
#include <stdio.h> int main() { char str[100]; // 假设要读取的行不超过 100 个字符 printf("请输入一行文本:\n"); if (fgets(str, sizeof(str), stdin) != NULL) { printf("你输入的是:%s", str); } else { printf("无法读取输入。\n"); } return 0; }
此代码将从标准输入中读取一行文本,存储在 str
中,并打印出来。
fwrite()函数
fwrite
是 C 标准库 <stdio.h>
中的函数,用于将数据块写入文件流中。它的原型如下:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
其中:
ptr
是一个指向要写入的数据块的指针。size
是每个数据块的字节数。nmemb
是要写入的数据块的数量。stream
是一个指向FILE
对象的指针,表示要写入的文件流。
函数返回值是实际写入的数据块的数量,如果返回值与 nmemb
不相等,可能表示写入时发生了错误。
fwrite
会将数据块从内存中写入到文件流中。通常情况下,它用于将二进制数据写入文件,而不是像 fprintf
那样进行格式化的文本写入。
fopen()函数
fopen
是一个标准C库函数,用于打开文件并返回一个指向 FILE
结构的指针,以供后续文件操作使用。它的原型通常定义在头文件 <stdio.h>
中:
FILE *fopen(const char *filename, const char *mode);
其中:
filename
是要打开的文件的路径和名称字符串。mode
是以字符串形式表示的文件访问模式,用于指定打开文件的方式。常见的模式包括:"r"
:只读模式,打开文件用于读取,文件必须存在。"w"
:写入模式,创建一个空文件用于写入,如果文件已存在则会被截断。"a"
:追加模式,打开文件用于写入,如果文件不存在则会创建,写入的数据会追加到文件末尾。"r+"
:读写模式,打开文件用于读取和写入,文件必须存在。"w+"
:读写模式,创建一个空文件用于读取和写入,如果文件已存在则会被截断。"a+"
:读写模式,打开文件用于读取和追加写入,如果文件不存在则会创建。
fopen
函数成功打开文件时返回一个指向 FILE
结构的指针,该指针用于后续文件操作,如果打开文件失败,则返回 NULL
。
fclose()函数
fclose
是 C 标准库 <stdio.h>
中的函数,用于关闭一个文件流。它的原型如下:
int fclose(FILE *stream);
其中:
stream
是指向FILE
结构的指针,表示要关闭的文件流。
函数返回值是整数类型,如果成功关闭文件流,则返回零;如果发生错误,则返回非零值。
关闭文件流后,相关的文件描述符会被释放,并且与该文件流相关的缓冲区也会被清空。通常情况下,当不再需要访问一个文件时,应该使用 fclose
函数关闭相应的文件流,以释放资源并确保文件被正确关闭。
fseek()函数
fseek
是 C 标准库 <stdio.h>
中定义的函数,用于设置文件流的位置指针。它的原型如下:
int fseek(FILE *stream, long int offset, int whence);
其中:
stream
是一个指向FILE
结构的指针,表示要进行定位操作的文件流。offset
是一个long int
类型的整数,表示偏移量,即要移动的字节数。whence
是一个整数,指定了起始位置:SEEK_SET
:从文件的开头开始偏移offset
个字节。SEEK_CUR
:从当前位置开始偏移offset
个字节。SEEK_END
:从文件的末尾开始偏移offset
个字节。
函数返回值表示操作是否成功,如果成功,返回0;如果出错,返回非零值,并设置 errno
表示错误类型。
fread()函数
fread
是 C 标准库中的一个函数,用于从文件中读取数据到内存缓冲区中。它的原型定义在 <stdio.h>
头文件中。
以下是 fread
函数的原型:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
其中:
ptr
是一个指向存储读取数据的内存缓冲区的指针。size
是每个数据项的大小(以字节为单位)。nmemb
是要读取的数据项的数量。stream
是一个指向FILE
对象的指针,表示要读取数据的文件流。
fread
函数从 stream
指定的文件流中读取数据,并将其存储到 ptr
指向的内存缓冲区中。它会尽可能读取 nmemb
个数据项,每个数据项的大小为 size
字节。fread
返回实际成功读取的数据项的数量,如果出现错误或者到达文件末尾,则返回的值可能小于 nmemb
。
以下是一个简单的示例,演示如何使用 fread
函数从文件中读取数据:
#include <stdio.h>
int main() {
FILE *file; char buffer[100];
// 打开一个文件
file = fopen("input.txt", "rb");
if (file == NULL) {
perror("fopen");
return 1; }
// 从文件中读取数据到缓冲区中
size_t items_read = fread(buffer, sizeof(char), sizeof(buffer), file);
if (items_read == 0 && !feof(file)) {
perror("fread");
fclose(file);
return 1; }
// 打印读取到的数据
printf("Read %zu items: %s\n", items_read, buffer);
// 关闭文件 fclose(file);
return 0; }
在这个示例中,程序打开一个名为 "input.txt" 的文件,使用 fread
函数从文件中读取数据到缓冲区 buffer
中,并打印出读取到的数据。如果发生错误,程序将打印出相应的错误信息,并关闭文件。
free()函数
在C和C++中,free()
函数用于释放动态分配的内存。当你使用 malloc()
、calloc()
或 realloc()
函数动态分配内存后,你需要使用 free()
函数来释放这些内存以防止内存泄漏。
free()
函数的原型是:
void free(void *ptr);
其中 ptr
是指向要释放的内存块的指针。
例如,在C中,如果你分配了一块内存并赋值给指针 ptr
,然后使用 free()
函数释放内存:
int *ptr = (int *)malloc(10 * sizeof(int)); // 使用ptr指向的内存 free(ptr);
在C++中,你也可以使用 new
和 delete
运算符来进行动态内存的分配和释放,而不必使用 malloc()
和 free()
函数。例如:
int *ptr = new int[10]; // 使用ptr指向的内存 delete[] ptr;
无论你使用哪种方法,一定要记得在不再需要内存块时释放它们,以避免内存泄漏问题。
G开头
gettimeofday()函数
gettimeofday()
函数是一个用于获取当前系统时间的 POSIX 函数。它的作用是获取当前时间,并将其存储在一个 timeval
结构中,该结构包含了秒数和微秒数。这个函数通常用于计时、时间相关的操作、性能测试等方面。它返回的时间信息通常用于计算程序执行时间、事件间隔、时间戳等。
gettimeofday()
函数的原型如下:
int gettimeofday(struct timeval *tv, struct timezone *tz);
其中,tv
是一个指向 timeval
结构的指针,用于存储获取到的时间信息;tz
是一个指向 timezone
结构的指针,通常被忽略,可以设置为 NULL
。
timeval
结构的定义如下:
struct timeval { time_t tv_sec; /* 秒数 */ suseconds_t tv_usec; /* 微秒数 */ };
使用 gettimeofday()
函数示例:
#include <sys/time.h> #include <stdio.h> int main() { struct timeval tv; gettimeofday(&tv, NULL); printf("Seconds: %ld, Microseconds: %ld\n", tv.tv_sec, tv.tv_usec); return 0; }
这个示例会打印当前的秒数和微秒数。
I开头
ioctl()函数
ioctl()
是一个在 Unix 和 Unix-like 系统上用来控制设备的系统调用。它允许用户空间程序与设备驱动程序进行通信,发送控制命令并获取设备状态信息。通常情况下,ioctl()
函数的原型如下:
int ioctl(int fd, unsigned long request, ...);
其中:
fd
是打开的设备文件的文件描述符。request
是一个控制命令,用于指示设备驱动程序执行特定的操作。...
是可选参数,用于传递控制命令所需的参数。
ioctl()
函数的工作方式很灵活,因为它允许传递各种不同类型和数量的参数。这样的设计使得它适用于各种不同类型的设备和操作。
例如,你可以使用 ioctl()
函数来设置串口的波特率、获取网络接口的状态、控制硬盘驱动器的操作等。在你的代码中,就使用了 ioctl()
函数来与 watchdog(看门狗)设备进行通信,以控制其行为。
L开头
lseek()函数
lseek
是 POSIX 标准中定义的一个函数,用于在文件中移动文件指针的位置。它允许程序员以字节为单位控制文件的读写位置。lseek
主要用于对普通文件、管道、套接字和其他可寻址的文件类型进行操作。
lseek
函数的原型如下所示:
#include <unistd.h> off_t lseek(int fd, off_t offset, int whence);
其中:
fd
是一个已经打开的文件描述符,它指向要进行操作的文件。offset
是要移动的字节数,它可以是正数、负数或零。whence
是相对位置的指示标志,它可以取以下值之一:SEEK_SET
:从文件的起始位置开始偏移offset
字节。SEEK_CUR
:从当前文件指针位置开始偏移offset
字节。SEEK_END
:从文件的末尾位置开始偏移offset
字节。
lseek
返回值是新的文件偏移量,如果操作失败,则返回 -1
。
以下是一个简单的示例,演示如何使用 lseek
函数在文件中移动文件指针的位置:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd;
off_t new_offset;
// 打开一个文件
fd = open("example.txt", O_RDONLY);
if (fd == -1) { perror("open");
return 1; }
// 移动文件指针到文件末尾
new_offset = lseek(fd, 0, SEEK_END);
if (new_offset == -1) { perror("lseek");
close(fd); return 1; }
// 打印新的文件指针位置(文件长度)
printf("File size: %ld bytes\n", new_offset);
// 关闭文件
close(fd);
return 0;
}
在这个示例中,程序打开一个名为 "example.txt" 的文件,然后使用 lseek
函数将文件指针移动到文件末尾。最后,程序打印出文件的长度(文件指针的位置),然后关闭文件。
M开头
memcpy()函数
memcpy
是 C 语言标准库中的一个函数,用于将一块内存区域的数据拷贝到另一个内存区域。它的原型定义在 <string.h>
头文件中。
以下是 memcpy
函数的原型:
void *memcpy(void *dest, const void *src, size_t n);
其中:
dest
是目标内存区域的指针,即要将数据拷贝到的位置。src
是源内存区域的指针,即要从中拷贝数据的位置。n
是要拷贝的字节数。
memcpy
函数将 src
指向的内存区域中的前 n
个字节的数据拷贝到 dest
指向的内存区域中。这个函数通常用于在内存中复制数据,例如从一个数组拷贝数据到另一个数组,或者从一个结构体拷贝数据到另一个结构体。
以下是一个简单的示例,演示如何使用 memcpy
函数:
#include <stdio.h>
#include <string.h> int main()
{
char src[] = "Hello, world!";
char dest[20];
// 将 src 中的数据拷贝到 dest
memcpy(dest, src, strlen(src) + 1);
printf("Source: %s\n", src);
printf("Destination: %s\n", dest);
return 0;
}
在这个示例中,memcpy
函数将字符串 "Hello, world!"
从 src
拷贝到 dest
,并打印出结果。注意,我们将 strlen(src) + 1
传递给 memcpy
作为要拷贝的字节数,以确保整个字符串(包括结尾的空字符 '\0')都被拷贝到目标内存区域中。
memset()函数
memset
是一个函数,用于将一块内存区域的内容设置为指定的值。它通常用于将内存初始化为特定的值,例如将数组清零。函数声明如下:
void *memset(void *ptr, int value, size_t num);
ptr
:指向要设置值的内存区域的指针。value
:要设置的值,通常是一个int
类型的整数,但实际上会被截断为unsigned char
。num
:要设置的字节数。
memset
会将 ptr
指向的内存区域的前 num
个字节都设置为 value
。
例如,下面的代码将一个字符数组清零:
char buffer[100]; memset(buffer, 0, sizeof(buffer));
这个调用将 buffer
数组的所有元素都设置为 0。
R开头
realloc()函数
realloc
是 C 语言中的一个标准库函数,用于重新分配先前通过 malloc
、calloc
或 realloc
分配的内存块的大小。其函数原型如下:
void *realloc(void *ptr, size_t size);
ptr
是指向先前分配的内存块的指针。size
是要重新分配的内存块的新大小(以字节为单位)。
realloc
函数的作用是将之前分配的内存块重新调整大小为 size
字节。如果重新分配成功,它会返回一个指向新分配内存块的指针,并且之前的内存块内容会被复制到新的内存块中。如果重新分配失败或者 size
参数为 0,则返回 NULL
,并且原内存块不受影响。
使用 realloc
可以动态地调整内存块的大小,以满足程序的需求,例如在动态数组的扩容过程中。但是需要注意的是,由于 realloc
可能会将内存块移动到新的位置,因此在使用时需要谨慎处理指针的使用,以防止出现野指针或内存泄漏等问题。
read()函数
read
函数是 Unix 系统调用之一,用于从文件描述符(file descriptor)读取数据。其函数原型如下:
ssize_t read(int fd, void *buf, size_t count);
其中:
fd
是文件描述符,指定要读取的文件。buf
是用于存储读取数据的缓冲区的指针。count
是要读取的字节数。
read
函数尝试从文件描述符 fd
指定的文件中读取 count
个字节的数据,并将其存储到 buf
指向的缓冲区中。函数返回实际读取的字节数,如果出现错误,则返回 -1,并设置 errno
来指示错误的类型。
需要注意的是,read
函数是一个阻塞调用,即当没有数据可读时,它会等待数据可用或者直到发生错误才返回。在网络编程中,可以使用非阻塞 IO 或者 select
、poll
等函数来实现非阻塞读取。
S开头
Strchr()函数
strchr
是 C 语言中的一个函数,用于在字符串中查找指定字符的第一次出现位置。它的作用是在一个以 null 结尾的字符串中寻找给定字符的位置,并返回一个指向该字符的指针。如果字符未被找到,则返回空指针。这个函数的原型通常是这样的:
char *strchr(const char *str, int character);
str
:要搜索的以 null 结尾的字符串的指针。character
:要查找的字符,通常以整数形式传递,但实际上代表一个 ASCII 值。
strchr
函数会从字符串的开头开始搜索,直到找到指定的字符或到达字符串的结尾。如果找到了指定的字符,函数会返回指向该字符的指针;否则,它会返回空指针。
Strcpy()函数
strcpy
是 C 语言中用于将一个字符串复制到另一个字符串的函数。它的原型通常如下:
char *strcpy(char *dest, const char *src);
dest
:是一个指向目标字符串的指针,表示要将源字符串复制到的位置。src
:是一个指向源字符串的指针,表示要复制的字符串。
strcpy
函数会将 src
指向的字符串复制到 dest
所指向的位置,直到遇到源字符串的空字符('\0')为止。源字符串的空字符也会被复制到目标字符串中,确保目标字符串以空字符结尾
strcpy
函数返回目标字符串的指针,即 dest
的值。
需要注意的是,使用 strcpy
函数时应确保目标字符串的空间足够大,以容纳源字符串的内容,否则可能会发生缓冲区溢出的情况。
以下是 strcpy
函数的一个示例用法:
#include <stdio.h> #include <string.h> int main() { char src[] = "Hello, world!"; char dest[20]; // 目标字符串必须足够大,以容纳源字符串及其空字符 strcpy(dest, src); // 将源字符串复制到目标字符串 printf("目标字符串: %s\n", dest); return 0; }
在这个例子中,源字符串 "Hello, world!" 被复制到了目标字符串 dest
中,然后打印出来。
Strncpy()函数
strncpy
是 C 语言中用于将一个字符串的一部分复制到另一个字符串的函数。它的原型通常如下:
char *strncpy(char *dest, const char *src, size_t n);
dest
:是一个指向目标字符串的指针,表示要将源字符串的一部分复制到的位置。src
:是一个指向源字符串的指针,表示要复制的字符串。n
:是一个表示要复制的字符数的整数值。
strncpy
函数会将 src
指向的字符串的前 n
个字符复制到 dest
所指向的位置。如果源字符串的长度小于 n
,则复制整个源字符串,并在剩余空间内填充空字符 ('\0'),以确保目标字符串总共包含 n
个字符。如果源字符串的长度大于或等于 n
,则只复制前 n
个字符,并不会在目标字符串的末尾添加空字符。
strncpy
函数返回目标字符串的指针,即 dest
的值。
需要注意的是,尽管 strncpy
在复制指定数目的字符时更安全,但在处理字符串时,确保目标字符串以空字符结尾仍然是程序员的责任。
以下是 strncpy
函数的一个示例用法:
#include <stdio.h> #include <string.h> int main() { char src[] = "Hello, world!"; char dest[20]; // 目标字符串必须足够大,以容纳指定数量的字符 strncpy(dest, src, 5); // 将源字符串的前 5 个字符复制到目标字符串 dest[5] = '\0'; // 手动添加空字符以终止字符串 printf("目标字符串: %s\n", dest); return 0; }
在这个例子中,源字符串 "Hello, world!" 的前 5 个字符被复制到了目标字符串 dest
中,然后手动添加了一个空字符来终止字符串。
Sprintf()函数
sprintf
是 C 标准库 <stdio.h>
中定义的函数,用于将格式化的数据写入字符串中。它的原型如下:
int sprintf(char *str, const char *format, ...);
其中:
str
是一个指向字符数组的指针,表示要写入的字符串的地址。format
是一个字符串,指定了输出的格式,可以包含转换说明符和普通字符,与printf
函数的格式相同。...
表示可变参数列表,包含了要写入字符串中的数据。
函数返回值表示写入到字符串中的字符数,不包括空字符结尾 \0
。
sprintf
函数将格式化的数据写入到字符串中,而不是输出到标准输出流。它可以用于将格式化的数据保存到字符串中,以便后续的处理或输出。
scanf()函数
scanf
是 C 语言标准库中的一个函数,用于从标准输入流(通常是键盘)中读取数据并根据指定的格式进行解析。它的原型定义在 <stdio.h>
头文件中。
以下是 scanf
函数的原型:
int scanf(const char *format, ...);
其中:
format
是格式字符串,指定了要读取的数据的格式。格式字符串可以包含格式说明符,比如%d
表示读取一个整数,%f
表示读取一个浮点数,%s
表示读取一个字符串等。...
是要填充的变量列表,用于存储读取到的数据。
scanf
函数根据 format
中指定的格式从标准输入流中读取数据,并将它们存储在 ...
中指定的变量中。scanf
在读取数据时会根据格式字符串中的格式说明符进行解析,如果输入的数据与格式不匹配,或者输入格式错误,scanf
将会失败并返回一个非零值。
以下是一个简单的示例,演示如何使用 scanf
函数从标准输入中读取整数:
#include <stdio.h>
int main() {
int num;
// 从标准输入中读取一个整数
printf("Enter an integer: ");
scanf("%d", &num);
// 打印读取到的整数
printf("You entered: %d\n", num);
return 0;
}
在这个示例中,scanf
函数从标准输入中读取一个整数,并将其存储在 num
变量中。然后,程序打印出读取到的整数。
Sscanf()函数
sscanf
是 C 语言中的一个标准库函数,用于按照指定的格式从一个字符串中读取数据。它的原型定义在 <stdio.h>
头文件中。
sscanf
函数的使用方式与 scanf
函数相似,不同之处在于 sscanf
从字符串中读取数据,而 scanf
从标准输入中读取数据。
以下是 sscanf
函数的原型:
int sscanf(const char *str, const char *format, ...);
其中:
str
是包含输入数据的字符串。format
是格式字符串,指定了要读取的数据的格式。...
是要填充的变量列表。
sscanf
函数根据 format
中指定的格式从 str
中读取数据,并将它们存储在 ...
中指定的变量中。与 scanf
不同,sscanf
不需要从标准输入中读取数据,而是直接从给定的字符串中读取数据。
以下是一个示例,演示如何使用 sscanf
从字符串中读取整数:
#include <stdio.h>
int main()
{
const char *str = "123 456";
int num1, num2;
// 从字符串中读取两个整数
sscanf(str, "%d %d", &num1, &num2);
printf("num1: %d, num2: %d\n", num1, num2);
return 0;
}
在这个示例中,sscanf
从字符串 "123 456"
中读取两个整数,并将它们存储在 num1
和 num2
变量中。
Strncmp()函数
strncmp
是 C 标准库中的一个函数,用于比较两个字符串的前 n 个字符是否相等。它的原型定义在 <string.h>
头文件中。
以下是 strncmp
函数的原型:
#include <string.h> int strncmp(const char *str1, const char *str2, size_t n);
其中:
str1
是第一个字符串的指针。str2
是第二个字符串的指针。n
是要比较的字符数。
strncmp
函数比较 str1
和 str2
指向的两个字符串的前 n
个字符,如果它们相等,则返回值为 0;如果第一个字符串小于第二个字符串,则返回一个负数;如果第一个字符串大于第二个字符串,则返回一个正数。
strncmp
函数通常用于在不知道字符串长度的情况下,比较两个字符串的前缀或部分内容,以确定它们是否相等。
以下是一个简单的示例,演示如何使用 strncmp
函数比较两个字符串的前 n 个字符:
#include <stdio.h> #include <string.h>
int main() {
const char *str1 = "apple";
const char *str2 = "applesauce";
// 比较两个字符串的前 5 个字符
int result = strncmp(str1, str2, 5);
if (result == 0) {
printf("The first 5 characters of the strings are equal.\n"); }
else if (result < 0) {
printf("The first 5 characters of the first string are lexicographically smaller.\n"); }
else {
printf("The first 5 characters of the first string are lexicographically larger.\n"); }
return 0; }
在这个示例中,strncmp
函数比较了字符串 "apple" 和 "applesauce" 的前 5 个字符,然后根据比较结果打印出相应的消息。
U开头
usleep()函数
usleep
函数是一个 POSIX 标准中定义的函数,用于使当前线程挂起指定的时间。其函数原型如下:
int usleep(useconds_t microseconds);
其中,microseconds
参数表示要挂起的微秒数(百万分之一秒)。调用 usleep
函数会导致当前线程挂起指定的时间长度,然后重新调度其他可运行的线程。当挂起时间结束后,线程将恢复运行。
需要注意的是,usleep
函数已经被标记为过时(deprecated),因为它不是线程安全的,而且它的精度也不够高。在新的代码中,建议使用 nanosleep
函数来替代 usleep
,nanosleep
函数提供了更高的精度和更好的可移植性。
W开头
write()函数
write
是一个 C 标准库函数,用于将数据写入文件描述符所代表的文件中。它的原型定义在 <unistd.h>
头文件中。
以下是 write
函数的原型:
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count);
其中:
fd
是要写入数据的文件描述符。buf
是一个指向要写入的数据的指针。count
是要写入的字节数。
write
函数将 buf
指向的数据写入到 fd
所代表的文件中。它返回实际写入的字节数,如果出现错误则返回 -1,并设置 errno
来指示错误的类型。
以下是一个简单的示例,演示如何使用 write
函数将数据写入文件:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd;
const char *data = "Hello, world!\n";
// 打开一个文件
fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd == -1) {
perror("open");
return 1; }
// 写入数据到文件
ssize_t bytes_written = write(fd, data, strlen(data));
if (bytes_written == -1) {
perror("write"); close(fd); return 1; }
// 关闭文件
if (close(fd) == -1) {
perror("close");
return 1; }
return 0; }
在这个示例中,程序打开一个名为 "output.txt" 的文件,使用 write
函数将字符串 "Hello, world!\n" 写入到文件中,然后关闭文件。如果 write
或者 close
函数返回 -1,程序将打印出相应的错误信息。
注意事项
c语言函数int和void
在 C 语言中,函数的返回类型决定了函数返回值的类型。int
和 void
是两种常见的函数返回类型,它们分别表示函数是否返回一个整数值或者不返回任何值。
int 返回类型: 使用
int
返回类型的函数通常用于返回一个整数值,这个值可以是任意整数,包括正整数、负整数或者零。函数的返回值可以用于判断函数执行的结果,或者作为其他计算的输入。例如,一个函数可能返回某个操作的状态码或者计算的结果。void 返回类型: 使用
void
返回类型的函数表示函数不返回任何值,也就是说,它不产生任何结果。这种函数通常用于执行一些操作或者任务,而不需要返回值。例如,一个函数可能用于打印信息、修改全局状态、或者执行其他一些操作,但不需要返回任何特定的值。
选择函数的返回类型取决于函数的功能和设计需求。如果函数执行某种计算并返回结果,则应该使用 int
返回类型;如果函数只是执行一些操作而不需要返回值,则应该使用 void
返回类型。在实际开发中,通常会根据函数的功能和设计来选择合适的返回类型,以便清晰地表达函数的意图并符合代码规范。