File IO
open
使用open函数来打开文件。open的函数原型如下:
1 | int open(const char *pathname, int flags, ... |
open函数可以有两个参数或者三个参数和一个整形返回值。pathname就是要打开的文件的路径名称。如果文件不存在并且flags没有O_CREAT
参数就会返回错误。第二个参数是标志,标志必须包含O_RDONLY
,O_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是要读取的字节数。函数返回读取成功的字节数。如果要读取成功的字节数比要读取的字节数小,有可能是要读取的字节数比文件本身还大。