File IO

open

使用open函数来打开文件。open的函数原型如下:

1
2
int open(const char *pathname, int flags, ...
/* mode_t mode */ );

open函数可以有两个参数或者三个参数和一个整形返回值。pathname就是要打开的文件的路径名称。如果文件不存在并且flags没有O_CREAT参数就会返回错误。第二个参数是标志,标志必须包含O_RDONLYO_WRONLY或者O_RDWR。三个标志即只读、只写、可读可写。当然有其他标志,这里不一一说明,具体可以使用man 2 open命令查看。第三个参数是mode,这个参数是用来指定创建的文件的权限的。权限和chmod命令的那个权限差不多,例如777就是当前用户、当前用户组其他用户、其他用户的权限都是可读可写可执行。不过这个权限要按位与上umask,即(mode & umask),可以直接用umask命令来查看umask。除了使用777这样的数字形式,也可以使用提供的宏,具体使用man 2 opne命令查看。返回值是文件句柄。

write

使用write函数来写入文件,write函数的原型如下:

1
ssize_t write(int fd, const void buf[.count], size_t count);

函数有三个参数和一个返回值。fd是文件句柄。buf是要写入的数据的buffer。count是要写入数据的字节数。返回值是实际写入的数据字节数。另外写入文件之前要使用open函数来打开文件并获取文件句柄。

read

使用read函数来读取文件,read的函数原型是:

1
ssize_t read(int fd, void buf[.count], size_t count);

read函数的函数原型和write函数的函数原型差不多。都是三个参数和一个返回值。fd是文件句柄,buf是数据buffer,count是要读取的字节数。函数返回读取成功的字节数。如果要读取成功的字节数比要读取的字节数小,有可能是要读取的字节数比文件本身还大。