在Linux系统中,进行输入输出(I/O)操作时,可以使用多种不同的函数和系统调用。以下是一些常用的I/O函数及其简单描述:
1. 文件操作相关函数
open: 打开一个文件,返回文件描述符。
int open(const char *pathname, int flags);
close: 关闭一个打开的文件描述符。
int close(int fd);
read: 从文件中读取数据。
ssize_t read(int fd, void *buf, size_t count);
write: 向文件中写入数据。
ssize_t write(int fd, const void *buf, size_t count);
lseek: 移动文件偏移量。
off_t lseek(int fd, off_t offset, int whence);
2. 标准I/O函数
这些函数定义在<stdio.h>
头文件中,是C语言提供的标准输入输出库。
- fopen: 打开一个文件并返回FILE指针。
FILE *fopen(const char *filename, const char *mode);
- fclose: 关闭一个打开的文件流。
int fclose(FILE *stream);
- fread: 从指定流中读取数据。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- fwrite: 向指定流写入数据。
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
- fprintf: 格式化输出到指定流。
int fprintf(FILE *stream, const char *format, ...);
3. 内存映射 I/O
对于大文件或特殊用途,可以使用内存映射来进行I/O操作,这样可以提高效率。
- mmap: 将文件或设备映射到内存空间。
void* mmap(void *addr, size_t length, int prot,
int flags, int fd, off_t offset);
- munmap: 解映射内存区域。
int munmap(void *addr, size_t length);
示例代码
下面是一个简单示例,演示如何使用 open
, read
, 和 write
函数进行基本的I/O操作:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
// 打开一个文件用于写入
int fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
if (fd == -1) {
perror("Error opening file");
return -1;
}
// 写入数据到该文件
const char* text = "Hello World!\n";
write(fd, text, sizeof(text));
// 切换到读模式,重新打开同一文件
close(fd); // 首先关闭之前打开的fd
fd = open("example.txt", O_RDONLY);
if (fd == -1) {
perror("Error opening file");
return -1;
}
// 从该文件读取数据并打印到控制台上
char buffer[100];
ssize_t bytesRead = read(fd, buffer, sizeof(buffer));
if (bytesRead >=0) {
write(STDOUT_FILENO , buffer , bytesRead ); // 将读出的内容打印出来
}
close(fd); // 最后要记得关闭打开的fd
return 0;
}
以上就是一些常见的Linux系统I/O函数及其用法。在实际开发过程中,根据需求选择合适的方法来处理输入输出是很重要的。
内容由零声教学AI助手提供,问题来源于学员提问