
Linux 标准 I/O(Standard I/O)库提供了一系列函数,用于高级文件输入和输出操作。这些函数构建在底层文件 I/O 系统调用之上,为开发者提供了更便捷、更高级的文件处理方式。以下是一些常用的 Linux 标准 I/O 库函数:
文件指针和标准 I/O:标准 I/O 使用
FILE结构来表示文件流,通过文件指针(FILE*)进行操作。FILE结构包含文件的缓冲区、文件描述符、文件位置指示器等信息。-
文件打开和关闭:
-
FILE* fopen(const char* filename, const char* mode);打开文件,并返回一个文件指针。filename是文件名,mode指定打开文件的模式(例如:"r" - 只读,"w" - 只写,"a" - 追加,"r+" - 读写,"w+" - 读写,"a+" - 读写追加等)。 -
int fclose(FILE* stream);关闭文件流,释放相关资源。
-
#includeint main() { // 打开文件 FILE* file = fopen("example.txt", "r"); if (file != NULL) { // 文件操作... // 关闭文件 fclose(file); } else { perror("Error opening file"); } return 0; }
-
文件读写:
-
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);从文件读取数据到缓冲区。ptr是数据缓冲区的指针,size是每个数据项的大小,nmemb是要读取的数据项数量,stream是文件指针。 -
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);将数据从缓冲区写入文件。ptr是数据缓冲区的指针,size是每个数据项的大小,nmemb是要写入的数据项数量,stream是文件指针。
-
#include#include int main() { FILE* file = fopen("example.txt", "w"); if (file != NULL) { // 写入数据 const char* data = "Hello, Standard I/O!"; fwrite(data, sizeof(char), strlen(data), file); // 关闭文件 fclose(file); } else { perror("Error opening file"); } return 0; }
-
标准输入输出:
-
int fprintf(FILE* stream, const char* format, ...);将格式化的数据写入文件。 -
int fscanf(FILE* stream, const char* format, ...);从文件中读取格式化的数据。 -
int printf(const char* format, ...);将格式化的数据写入标准输出。 -
int scanf(const char* format, ...);从标准输入读取格式化的数据。
-
#includeint main() { FILE* file = fopen("example.txt", "w"); if (file != NULL) { // 将格式化的数据写入文件 fprintf(file, "The answer is: %d\n", 42); // 关闭文件 fclose(file); } else { perror("Error opening file"); } return 0; }
-
标准错误输出:
-
int perror(const char* s);输出一个错误消息。
-
#includeint main() { FILE* file = fopen("nonexistent_file.txt", "r"); if (file == NULL) { // 输出错误消息 perror("Error opening file"); } return 0; }
-
标准输入输出重定向:
-
int fflush(FILE* stream);刷新缓冲区。 -
int setvbuf(FILE* stream, char* buffer, int mode, size_t size);设置文件流的缓冲区。 -
int fseek(FILE* stream, long offset, int whence);移动文件位置指示器。
-
#includeint main() { FILE* file = fopen("example.txt", "w"); if (file != NULL) { // 写入数据 fprintf(file, "Hello, Standard I/O!"); // 刷新缓冲区 fflush(file); // 移动文件位置指示器 fseek(file, 0, SEEK_SET); // 关闭文件 fclose(file); } else { perror("Error opening file"); } return 0; }
-
标准输入输出缓冲:标准 I/O 库使用缓冲区来提高性能。默认情况下,标准输入(stdin)和标准输出(stdout)是行缓冲的,而标准错误输出(stderr)是无缓冲的。
Destoon B2B网站下载Destoon B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。 系统特性1、跨平台。支持Linux/Unix/Windows服务器,支持Apache/IIS/Zeus等2、跨浏览器。基于最新Web标准构建,在
- 行缓冲:当遇到换行符
\n时,缓冲区会被刷新。 - 全缓冲:当缓冲区满时,或者使用
fflush函数时,缓冲区会被刷新。
- 行缓冲:当遇到换行符
#includeint main() { // 默认为行缓冲,当遇到换行符时,缓冲区被刷新 printf("Hello, "); // 不会立即输出 // 刷新缓冲区 fflush(stdout); // 输出 "Hello, " // 全缓冲,缓冲区满时被刷新 printf("World!"); // 不会立即输出 // 刷新缓冲区 fflush(stdout); // 输出 "World!" return 0; }
-
标准输入输出重定向:标准输入输出重定向允许程序从不同的源读取输入或将输出发送到不同的目标。这在命令行中特别有用。
- 标准输入重定向:
./program 程序从input.txt中读取输入。 - 标准输出重定向:
./program > output.txt程序将输出写入到output.txt。
- 标准输入重定向:
#includeint main() { // 从标准输入读取数据 int number; scanf("%d", &number); printf("You entered: %d\n", number); // 将输出重定向到文件 freopen("output.txt", "w", stdout); printf("This will be written to output.txt\n"); return 0; }
-
标准输入输出流的复制:通过
dup或dup2函数,可以复制文件描述符,实现标准输入输出流的重定向。-
int dup(int oldfd);复制文件描述符,返回新的文件描述符。 -
int dup2(int oldfd, int newfd);复制文件描述符到指定的文件描述符,如果指定的文件描述符已经打开,则关闭它。
-
#include#include int main() { // 复制标准输出流到文件描述符 3 int newfd = dup(STDOUT_FILENO); // 输出到标准输出和新的文件描述符 printf("Hello, Standard Output!\n"); dprintf(newfd, "Hello, New File Descriptor!\n"); // 关闭新的文件描述符 close(newfd); return 0; }
-
标准错误输出:标准错误输出流
stderr通常用于输出程序运行时的错误消息。
#includeint main() { fprintf(stderr, "This is an error message.\n"); perror("An error occurred"); return 0; }









