|
|
2#

楼主 |
发表于 2010-7-23 10:12:01
|
只看该作者

3.关闭文件
int close(int fd)
fd:文件描述符(一个非负整数)
4.读文件
int read(int fd, const void *buf, size_t length)
从文件描述符fd所指向的文件中读取length个字节到buf所指向的缓冲区中,返回实际读取的字节数。
5.写文件
int write(int fd, const void *buf, size_t length)
把buf所指向的缓冲区中的length个字节写到文件描述符fd所指向的文件中,返回实际写入的字节数。
6.定位文件(移动文件指针)
int lseek(int fd, offset_t offset, int whence)
将文件读写指针相对whence移动offset个字节。操作成功,则返回文件指针相对于文件头的位置。
whence可以取下述值:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
offset可取负值,表示向前移动。
7.访问权限判断
int access(const char *pathname, int mode)
pathname:文件名称
mode:要判断的访问权限,可以取下面的值或者它们的组合。R_OK:文件可读,W_OK:文件可写,X_OK:文件可执行,F_OK:文件存在。
返回值:当我们测试成功时,函数返回0,否则如果有一个条件不符合,返回-1。
1 #include <sys/types.h>
2 #include <sys/stat.h>
3 #include <fcntl.h>
4 #include <stdio.h>
5 #include <errno.h>
6
7 #define BUFFER_SIZE 1024
8
9 int main(int argc,char **argv)
10 {
11 int from_fd,to_fd;
12 int bytes_read,bytes_write;
13 char buffer[BUFFER_SIZE];
14 char *ptr;
15
16 if(argc!=3)
17 {
18 fprintf(stderr,"Usage:%s fromfile tofile/n/a",argv[0]);
19 exit(1);
20 }
21
22 /* 打开源文件 */
23 if((from_fd=open(argv[1],O_RDONLY))==-1)
24 {
25 fprintf(stderr,"Open %s Error:%s/n",argv[1],strerror(errno));
26 exit(1);
27 }
28
29 /* 创建目的文件 */
30 if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
31 {
32 fprintf(stderr,"Open %s Error:%s/n",argv[2],strerror(errno));
33 exit(1);
34 }
35
36 /* 以下代码是一个经典的拷贝文件的代码 */
37 while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
38 {
39 /* 一个致命的错误发生了 */
40 if((bytes_read==-1)&&(errno!=EINTR)) break;
41 else if(bytes_read>0)
42 {
43 ptr=buffer;
44 while(bytes_write=write(to_fd,ptr,bytes_read))
45 {
46 /* 一个致命错误发生了 */
47 if((bytes_write==-1)&&(errno!=EINTR))break;
48 /* 写完了所有读的字节 */
49 else if(bytes_write==bytes_read) break;
50 /* 只写了一部分,继续写 */
51 else if(bytes_write>0)
52 {
53 ptr+=bytes_write;
54 bytes_read-=bytes_write;
55 }
56 }
57 /* 写的时候发生的致命错误 */
58 if(bytes_write==-1)break;
59 }
60 }
61 close(from_fd);
62 close(to_fd);
63 exit(0);
64 } |
|