目录
缓冲
在 C 语言中,缓冲通常分为三种类型:全缓冲、行缓冲和无缓冲。它们的行为决定了数据如何被缓存并何时实际写入输出设备或文件。
全缓冲 (Fully Buffered):
数据在缓冲区中积累到一定量(4k)后或fflush
被调用时才会写入目标设备。
行缓冲 (Line Buffered):
数据会在遇到换行符 (\n
)、缓冲区满(1k)或 fflush
被调用时才会写入目标设备。
无缓冲 (Unbuffered):
每次写操作都直接写入目标设备,缓冲区不使用。
文件描述符
文件描述符(File Descriptor)是一个非负整数,代表进程打开的文件或其他 I/O 资源。它用于标
识和操作文件,如读取、写入和关闭。操作系统在内核中维护一个文件描述符表,每个打开的文件
都会被分配一个唯一的文件描述符。
文件描述符通常是从 0 开始的整数,标准输入(stdin)为 0,标准输出(stdout)为 1,标准错误
输出(stderr)为 2。
open函数
函数原型:int open(const char *pathname, int flags, ...);
参数
pathname
: 要打开的文件的路径名(字符串)。
flags
: 控制文件打开方式的标志(整数),如 O_RDONLY
、O_WRONLY
、O_RDWR
等。
mode
: 文件权限模式(可选),当 flags
包含 O_CREAT
时使用。它指定新文件的权限(如 0666
)。如果文件已经存在,则此参数被忽略。
常见的 flags
O_RDONLY
: 以只读模式打开文件。
O_WRONLY
: 以只写模式打开文件。
O_RDWR
: 以读写模式打开文件。
O_CREAT
: 如果文件不存在则创建新文件。
O_TRUNC
: 如果文件存在且以写入模式打开,则将文件长度截断为零。
O_APPEND
: 以追加模式打开文件,每次写操作都会将数据追加到文件末尾。
返回值
成功时,open
函数返回一个非负整数,表示文件描述符。
失败时,返回 -1
,并设置 errno
以指示错误原因。
read函数
函数原型:ssize_t read(int fd, void *buf, size_t count);
参数
fd
: 文件描述符,通常通过 open
函数获得。
buf
: 指向存储读取数据的缓冲区的指针。
count
: 要读取的字节数。
返回值:
成功时,返回读取的字节数。
出错时,返回 -1
并设置 errno
。
write函数
函数原型:ssize_t write(int fd, const void *buf, size_t count);
参数
fd
: 文件描述符,通常通过 open
或 socket
函数获得。
buf
: 指向包含要写入数据的缓冲区的指针。
count
: 要写入的字节数。
返回值:
成功时,返回实际写入的字节数。
出错时,返回 -1
并设置 errno
。