Linux学习(函数)

函数

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 来指示错误的类型。

以下是一个简单的示例,演示如何使用 openclose 函数打开并关闭一个文件:

#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++中,你也可以使用 newdelete 运算符来进行动态内存的分配和释放,而不必使用 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; }

这个示例会打印当前的秒数和微秒数。

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 语言中的一个标准库函数,用于重新分配先前通过 malloccallocrealloc 分配的内存块的大小。其函数原型如下:

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 或者 selectpoll 等函数来实现非阻塞读取。

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" 中读取两个整数,并将它们存储在 num1num2 变量中。

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 函数比较 str1str2 指向的两个字符串的前 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 函数来替代 usleepnanosleep 函数提供了更高的精度和更好的可移植性。

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,程序将打印出相应的错误信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/566853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统中Nginx的使用

Nginx是一款开源的高性能、高可靠性的Web服务器和反向代理服务器。它在Linux系统中得到了广泛的应用&#xff0c;被用于构建高性能的Web应用和提供反向代理服务。下面将介绍Nginx在Linux系统中的使用以及一些常见的应用案例。 一、Nginx的安装和配置 安装Nginx 在Linux系统中…

2024深圳杯数学建模挑战赛B题:批量工件并行切割下料问题思路代码成品论文分析

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓ https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 问题重述 深圳杯数学建模挑战赛2024B题&#xff1a;批量工件并行切割下料问题 板材切割下料是工程机械领域重要…

hyperf 三十一 极简DB组件

一 安装及配置 composer require hyperf/db php bin/hyperf.php vendor:publish hyperf/db 默认配置 config/autoload/db.php 如下&#xff0c;数据库支持多库配置&#xff0c;默认为 default。 配置项类型默认值备注driverstring无数据库引擎 支持 pdo 和 mysqlhoststringl…

python_django中小学家校互动系统vue_flask家校联系

实现了一个完整的家校互动系统&#xff0c;其中主要有作业信息模块、学校管理员模块、学生学籍模块、学生成绩模块、学科模块、系统新闻模块、系统公告模块、校内新闻模块、校内公告模块、用户表模块、token表模块、关于我们模块、收藏表模块、年级模块、家长模块、教师模块、互…

贪心算法练习day.1

理论基础 贪心算法是一种常见的解决优化问题的方法&#xff0c;其基本思想就是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部的最优决策&#xff0c;以此得到全局的最优解&#xff0c;例如在十张面额不同的钞票&#xff0c;让我们…

mysql-connector 交叉编译

1.下载 官网选择对应的系统以及版本&#xff0c;这里我用的是6.1.5https://downloads.mysql.com/archives/c-c/ 2.解压 tar -zxvf mysql-connector-c-6.1.5-src.tar.gz 3.先常规编译&#xff08;因为交叉编译的过程中&#xff0c;会用到生成的二进制文件&#xff09; cd m…

PCB元器件的符号和封装

打开立创商店&#xff1a; PCB是用来链接器件和让电路小型化的 符号&#xff1a; 封装&#xff1a; 封装是在PCB板上呈现的方式 紫色&#xff1a;不需要上绿由 红色: 焊盘 黄色: 丝印层 也就是白色的这个 焊盘 焊盘是为了让接触点增大&#xff0c;更好的焊接元件 焊盘…

ardupilot开发 --- 机载(边缘)计算机-VISP高阶 篇

让我再看你一眼从南到北 0. 基础1. 视觉伺服1.1 视觉伺服基础1.1.1 基本理论1.1.2 代码解析(tutorial-ibvs-4pts.cpp)&#xff1a; 1.2 基于图像处理的视觉伺服 0. 基础 基础知识点请参考基础篇。 1. 视觉伺服 参考&#xff1a;Visual servoing 1.1 视觉伺服基础 参考1&am…

达芬奇调色:色彩理论入门

写在前面 整理一些达芬奇调色的笔记博文内容涉及&#xff1a; 一级调色是什么&#xff0c;以及 调色素材格式 log&#xff0c;raw&#xff0c;rec709 简单认知理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#…

全网最全搭建Electron项目的各种方式及错误解决

一、官方文档手动搭建 文档地址&#xff1a;快速入门 | Electron&#xff0c;按照文档步骤操作即可&#xff0c;项目只包含了Electron依赖&#xff0c;仅仅只是一个hello world展示。 二、github上拉取官网的electron-quick-start项目 electron-quick-start跟方式一创建的一…

MySQL数据库运维:运行监控及解决sql执行死锁问题

前言 在现代数据密集型应用程序的开发和部署中&#xff0c;MySQL数据库的运维是至关重要的环节之一。一个良好设计和维护的MySQL数据库系统可以确保数据的准确性、可靠性和高效的访问&#xff0c;从而支持业务的顺利运行。然而&#xff0c;随着业务规模的增长和复杂性增加&…

Spring 5源码学习

文章目录 一. 访问[spring官网], 找到Spring Framework&#xff0c;点击红色标记github仓库&#xff0c;下载对应的分支代码&#xff0c;本人下载5.1.x二. 安装gradle三. 调整spring-framework配置四. 开始编译五.导入idea 一. 访问[spring官网], 找到Spring Framework&#xf…

使用Python和wxPython下载视频封面

介绍&#xff1a; 在在线视频内容的世界中&#xff0c;是领先的平台。拥有数十亿的视频&#xff0c;拥有引人注目的封面图像非常重要&#xff0c;以吸引观众。在本博客文章中&#xff0c;我们将探讨如何使用Python和wxPython模块下载视频封面。我们将提供两个代码示例&#xff…

图像数据做并行规约时,如何确定共享内存和网格的大小

做并行规约时&#xff0c;如何确定共享内存和网格的大小 1、为什么要确定共享内存和网格大小2、共享内存大小定义3、网格大小 注&#xff1a;1、这里记录使用笔记&#xff0c;不对cuda的名词做解释&#xff0c;没有详细数学原理和代码。 2、环境&#xff1a;cuda8.0&#xff0c…

密码学 | Random Oracle 随机预言机

​ &#x1f951;原文&#xff1a;究竟什么才是随机预言机呢&#xff1f; - 玄星的回答 &#x1f951;答主指出&#xff1a; 英文维基明明对 随机预言机 给出了两个完全不同的理解&#xff0c;但这两个理解之间的连接词却是 “Stated differently”&#xff0c;即 “换句话说…

STM32通过ESP8266(MQTT)连接新版ONENET(2024/4/23)(保姆级教程)附运行结果

⏩ 大家好哇&#xff01;我是小光&#xff0c;想要成为系统架构师的嵌入式爱好者。 ⏩在各种嵌入式系统中我们经常会使用上位机去做显示&#xff0c;本文对STM32通过ESP8266连接最新版的ONENET做一个详细教程。 ⏩感谢你的阅读&#xff0c;不对的地方欢迎指正。 STM32通过ESP82…

【图说】VMware Ubuntu22.04 详细安装教程

前言 无论是从事 Linux 开发工作&#xff0c;还是希望电脑运行双系统&#xff0c;VMware 虚拟机都是我们日常工作不可或缺的工具。本章将会重点介绍 VMware 安装流程&#xff0c;以及在 VMware 上如何运行、使用 Ubuntu22.04 系统。 一、VMware 下载安装 1.1 VMware 官网下载…

如何查看西门子触摸屏的镜像版本?

如何查看西门子触摸屏的镜像版本? 当软件组态的设备版本和实际设备镜像之间版本不同时,那么在传输项目时就会出现兼容性冲突的提示。 镜像版本说明: 如何调整镜像版本(升级或降级)? 为了使用新功能以及提高面板的稳定性、可靠性和可用性,建议使用新的镜像版本。 一、 通…

目标检测算法是指什么?

一、目标检测算法是指什么&#xff1f; 目标检测算法是计算机视觉领域的一个重要分支&#xff0c;它旨在识别和定位图像中的目标对象。以下是目标检测算法的相关内容&#xff1a; 目标检测的核心问题&#xff1a;目标检测需要解决的两个核心问题是“目标是什么”和“目标在哪里…

【计算机网络】(三)物理层 - 通信基础

文章目录 【计算机网络】&#xff08;三&#xff09;物理层 - 通信基础前言3.1 物理层的基本概念3.2 数据通信的基础知识3.2.1 数据、信号、码元3.2.2 信源、信宿、信道3.2.3 编码、调制3.2.3.1 基带调制&#xff08;编码&#xff09;3.2.3.2 带通调制&#xff08;调制&#xf…