1. Linux 写入文件的实现方式
在 Linux 中,写入文件是一项常见且重要的操作。通过将数据写入文件,我们可以将程序的输出结果保存下来,或者将配置信息写入到配置文件中。本文将介绍 Linux 中常用的几种写入文件的实现方式。
1.1 fwrite 函数
fwrite 函数是 C 语言标准库中提供的一个用于写入数据到文件的函数。该函数的原型如下:
size_t fwrite (const void *ptr, size_t size, size_t count, FILE *stream);
其中,ptr 是要写入的数据的起始地址,size 是每个数据项的字节数,count 是要写入的数据项的个数,stream 是指向要写入的文件的指针。该函数的返回值是成功写入的数据项的个数。
fwrite 函数可以用来写入二进制数据或者文本数据。下面是一个使用 fwrite 函数将数据写入到文件的示例:
#include<stdio.h>
int main() {
FILE *fp;
int data[] = {10, 20, 30, 40, 50};
int num_items = sizeof(data) / sizeof(int);
fp = fopen("data.bin", "wb");
if (fp == NULL) {
printf("Error opening file\n");
return -1;
}
if (fwrite(data, sizeof(int), num_items, fp) != num_items) {
printf("Error writing to file\n");
}
fclose(fp);
return 0;
}
在上述代码中,我们首先定义了一个整型数组 data,然后计算了数组的项数 num_items。接着,我们使用 fopen 函数打开了一个名为 data.bin 的二进制文件,并将文件指针保存到了 fp 变量中。然后,我们使用 fwrite 函数将 data 数组中的数据写入到了文件中,最后使用 fclose 函数关闭了文件。
上述代码会将整型数组 data 中的数据以二进制形式写入到 data.bin 文件中。如果写入成功,fwrite 函数会返回值等于 num_items。否则,它会返回一个小于 num_items 的值。
1.2 fprintf 函数
fprintf 函数是 C 语言标准库中提供的一个用于格式化输出到文件的函数。该函数的原型如下:
int fprintf (FILE *stream, const char *format, ...);
其中,stream 是指向要写入的文件的指针,format 是一个格式字符串,后续的参数是传递给格式字符串的值。该函数的返回值是成功写入的字符数。
下面是一个使用 fprintf 函数将数据写入到文件的示例:
#include<stdio.h>
int main() {
FILE *fp;
int data[] = {10, 20, 30, 40, 50};
int num_items = sizeof(data) / sizeof(int);
int i;
fp = fopen("data.txt", "w");
if (fp == NULL) {
printf("Error opening file\n");
return -1;
}
for (i = 0; i < num_items; ++i) {
fprintf(fp, "%d ", data[i]);
}
fclose(fp);
return 0;
}
在上述代码中,我们使用 fopen 函数打开了一个名为 data.txt 的文本文件,并将文件指针保存到了 fp 变量中。然后,我们使用 fprintf 函数将整型数组 data 中的数据以格式化的方式写入到了文件中。最后,我们使用 fclose 函数关闭了文件。
上述代码会将整型数组 data 中的数据以字符串的形式写入到 data.txt 文件中,并使用空格作为分隔符。
1.3 write 函数
write 函数是用于写入数据到文件的系统调用函数。它的声明在头文件 unistd.h 中,原型如下:
ssize_t write (int fd, const void *buf, size_t count);
其中,fd 是要写入的文件的文件描述符,buf 是要写入的数据的起始地址,count 是要写入的数据的字节数。该函数的返回值是成功写入的字节数。
下面是一个使用 write 函数将数据写入到文件的示例:
#include<fcntl.h>
#include<unistd.h>
int main() {
int fd;
int data[] = {10, 20, 30, 40, 50};
int num_items = sizeof(data) / sizeof(int);
fd = open("data.bin", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
if (fd == -1) {
printf("Error opening file\n");
return -1;
}
if (write(fd, data, sizeof(int) * num_items) != sizeof(int) * num_items) {
printf("Error writing to file\n");
}
close(fd);
return 0;
}
在上述代码中,我们使用 open 函数打开一个名为 data.bin 的文件,并将文件描述符保存到了 fd 变量中。然后,我们使用 write 函数将整型数组 data 中的数据以二进制形式写入到了文件中。最后,我们使用 close 函数关闭了文件。
上述代码与使用 fwrite 函数的示例代码类似,都是将整型数组 data 中的数据以二进制形式写入到 data.bin 文件中。不同之处在于使用了不同的写入函数。
2. 总结
本文介绍了 Linux 中常用的几种写入文件的实现方式。我们首先讲解了 fwrite 函数,它是 C 语言标准库中提供的一个用于写入数据到文件的函数。然后,我们介绍了 fprintf 函数,它是用于格式化输出到文件的函数。最后,我们介绍了 write 函数,它是用于写入数据到文件的系统调用函数。
无论是在 C 语言还是在 Shell 脚本中,写入文件都是一个常见的操作。熟练掌握不同的写入文件的实现方式,有助于我们更好地处理文件操作。