**输入/输出(I/O)**是在主存和外部设备(例如磁盘文件,终端和网络)之间复制数据的过程。输入操作是从I/O设备复制到主存,而输出操作是从主存数据复制到I/o设备。
“一切皆文件”
而在Linux中所有的I/O设备统统被模型化为文件,而所有的输入输出都被当做相应的文件的读和写来执行。
进而我们认识一下打开文件函数(open),关闭文件的函数(close),读(read)和写(write)函数。
- Open函数
open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。
我们先看看Open函数在Linux下的定义
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *filename, int flags, mode_t mode);
open函数将filename转换成一个文件描述符,并且返回描述符数字。返回的描述符总是在在进程中没有打开的最小描述符。
flags参数指明了进程打算如何访问这个文件。而需要注意的是:参数flag必须指定以下三个常量的一种,且只允许指定一个
O_RDONLY:只读模式
O_WRONLY:只写模式
O_RDWR:可读可写
mode参数表示设置文件访问权限的初始值
如 open(filename,O-WRONLT | O-CREAT | O-TRUNC,mode)是创建一个文件的标准格式。
2.Close函数
close函数用于关闭一个已经打开的文件。函数原型如下:
#include <unistd.h>
int close(int fd);
返回值:若成功则返回0,出错则返回-1
参数:fd是文件标识符,是通过open函数获得的文件标识符。
3.Write函数
write函数用于向打开的文件写入数据。函数原型如下:
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t nbtyes
返回值:如果写成功则返回实际写入的字节数,若出错则返回-1。
参数:
fd 文件标识符,由调用open函数从内核获得。
*buf 待写入数据的缓冲区地址。
nbytes 需要写入文件的数据字节数。
即Write函数从内存位置buf复制到至多n个字节到描述符fd当前文件位置。
4.read函数
read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。
read函数原型:
ssize_t read(int fd,void *buf,size_t count)
read 函数从描述符为fd的当前文件位置复制到最多为count个字节到内存位置buf.
下边我们看一些例子:
1
/* $begin cpstdin