但我们操作完文件后要关闭文件:
int close(int fd)
fd:文件描述符,由系统分配。
int read(int fd, const void *buf, size_t length)
功能:
从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。
int write(int fd, const void *buf, size_t length)
功能:
把length个字节从buf所指的缓冲区中写到文件描述符fd所指的文件中,返回值为实际写入的字节数。
int lseek(int fd, offset_t offset, int whence)
功能:
将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。
whence可使用下述值:
SEEK_SET
SEEK_CUR
SEEK_END
offset 可以取负值,表示向前移动。
lseek(fd, -5, SEEK_CUR)
将文件指针相对当前位置向前移动5个字节。
lseek(fd, 0,SEEK_END)
此调用返回就是文件的长度。
有时候我们需要判断文件是否可以进行某种操作(读、写等),这时就可以使用access函数:
int access(const char *pathname, int mode)
pathname:文件名称
mode:要判断的访问权限。可以取下面的值,或者组合。R_OK:文件可读,W_OK:文件可写,X_OK:文件可执行, F_OK:文件存在。
返回值:我们测试成功时返回为0,否则如果一条不符,就返回-1.
下面介绍一个例子file_cp.c,综合性比较高。
1、程序使用了errno.h这个头文件,每当调用失败时,系统会将出错信息填充errno这个全局变量,我们就可以通过读取这个变量来获取出错原因。
2、stderr这个变量同stdin和stdout分别称为标准错误、标准输入和标准输出。stderr标准错误,直接向屏幕上输出东西,由于其没有缓冲区,就直接输出到屏幕。
3、本程序中包含一个经典点的cp程序,这个要记一下,也许以后会用到。