2-1 系统调用方式-文件访问
1.常见创建模式
U_IRUSR 可读
U_IWUSR 可写
U_IXUSR 可执行
U_IRWXU 可读,写,执行
还可以直接用数字来表示文件的访问权限
可执行:1
可写:2
可读:4
可读,写:6
无任何权限:0
2.常用的文件打开标志
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_APPEND 追加方式打开
O_CREAT 创建一个文件
3.打开文件
(1) int open(const char *pathname,int flags)
(2) int open(const char *pathname,int flags,mede_t mode)
pathname:要打开的文件名
flags:打开标志
mode:访问权限
注意:如果使用了O_CREAT创建一个文件的方式必须使用带3个参数的open。
例如:open(pathname,O_CREAT|O_RDWR,0755)
如果文件存在打开文件,否则创建文件
4.文件关闭
int close(int fd)
fd位int open()函数返回的文件描述符
5.读写
int read(int fd,void *buf,size_tlength)
功能:从文件描述符fd所指的文件读取length个字节到buf所指向的缓冲区中,返回值位实际读取的字节数。
如果返回0,表示未读入任何数据,已到达了文件尾部。如果返回-1,表示出现错误
int write(int fd,void *buf,size_tlength)
功能:从buf所指向的缓冲区中前length个字节读取到s文件描述符fd所指的文件,返回值位实际读取的字节数。
如果返回0,表示未写入任何数据。如果返回-1,表示出现错误
6.访问判断:判断某个文件是否具有某种权限
int access(const char *pathname,int mode)
mode:要判断的访问权限。可以去一下值或者他们的组合
R_OK 文件可读
W_OK 文件可写
X_OK 文件可执行
F_OK 文件存在
返回值:当我们测试成功是返回0,否则返回-1.
7.read write实例
#include <unistd.h>
#include <stdio.h>
int main()
{
char buffer[256];
int nread;
nread=read(0,buffer,256);
if(nread==-1)
write(2, "出现错误1\n",22);
if(write(1,buffer,nread)!=nread)
write(2, "出现错误2\n",22);
}
8.read write open close实例
(1)文件复制----单字符
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
char c;
int in,out;
in=open("read1.c", O_RDONLY);
out=open("write1.c",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
while(read(in,&c,1)==1)
write(out,&c,1);
close(in);
close(out);
exit(0);
}
(2)文件复制----字符串
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
char block[1024];
int in,out;
int nread;
in=open("read1.c", O_RDONLY);
out=open("write2.c",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
while((nread=read(in,block,sizeof(block)))>0)
write(out,block,nread);
close(in);
close(out);
exit(0);
}