胡神

导航

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);
}

 

 

 

 

  

posted on 2011-08-26 22:48  胡神  阅读(657)  评论(0编辑  收藏  举报