open(char *, flag, mode)在fcntl.h文件中声明。函数的作用:创建或打开某个文件,参数:最多有三个参数;
第一个参数,char * 包含有文件名和路径
第二个参数:flag 打开文件的方式
第三个参数:mode 创建文件的权限。
-
flag内容如下:
flag
|
功能
|
O_RDONLY
|
只读
|
O_WRONLY
|
只写
|
O_RDWR
|
读写
|
O_CREAT
|
创建一个文件
|
O_EXCL
|
如果使用
O_CREAT
时文件存在,则可返回错误消息。这一
参数可测试文件是否存在。
|
O_TRUNC
|
打开文件(会把已经存在的内容给删除)。
|
O_APPEND
|
追加方式打开文件(不会把已经存在的内容给删除)。
|
内核的一个重要功能是文件管理,系统有非常多的文件,内核怎样认识每一个文件呢?内核采用ID号的方式标识这些文件,inode 号,node号表示不同的文件,比如ls –lai i,只要文件不一样,inode号就不一样。
-
write(int fd, void *buf, size_t count ):
第一个参数:向哪一个文件中去写;第二个参数:向这个文件中写什么内容;第三个参数:向这个文件中写多少个。函数的返回值:是实际写的字节数。
-
read(int fd, void *buf, size_t count)
第一个参数:从哪一个文件中去读;第二个参数:读到什么地方去;第三个参数:读多少个。函数的返回值:是实际读的字节数。
- lseek(int fd, off_t offset, int whence),该函数的头文件: sys/types.h unistd.h
功能:调整读写的位置指针;
第一个参数:要调整的文件的文件描述符;
第二个参数:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移);
第三个参数:当前位置的基点,有三个标志,
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小;
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量。
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小。函
数的
返回值:成功:文件当前的位置,出错:-1。
-
close(fd),
调用close()函数可以关闭一个打开的文件。
调用成功返回0,出错返回-1,并设置errno;
注:当一个进程终止时,该进程打开的所有文件都由内核自动关闭;
#include "unistd.h"
#include "fcntl.h"
#include "stdio.h"
int main()
{
int fd;
int ret,readret;
char buf[]="hello linux\n";
char readbuf[128]={0};
fd=open("./a.c",O_RDWR | O_CREAT | O_EXCL,0777);
if(fd < 0)
{
printf("creat file a.c failure\n");
return -1;
}
printf("creat file a.c sucess,fd=%d\n",fd);
ret=write(fd,buf,8);
printf("write ret=%d\n",ret);
// change read_write_pointer
lseek(fd,-4,SEEK_END);
readret=read(fd,readbuf,128);
printf("readbuf=%s,readret=%d\n",readbuf,readret);
close(fd);
return 0;
}