利用open创建a.txt和b.txt。利用write向a.txt写入“hello world”,接着将a.txt的“hello world”读到缓冲区,再将缓冲区的“hello world”写入到b.txt。
#include
#include
#include
#include
#include
#include
int main()
{
char *buf="Hello World";
char c;
int in,out,len;
len = strlen(buf);
in = open("readfile",O_CREAT | O_TRUNC | O_RDWR,0666);
out = open("writefile",O_CREAT | O_TRUNC | O_RDWR,0666);
write(in,buf,len);
lseek(in,0,SEEK_SET);
while(read(in,&c,1) == 1)
write(out,&c,1);
close(out);
close(in);
exit(0);
}
其他参考如下:
文件I/O编程 (open、read、write、lseek、close) |
通常,一个进程打开时,都会打开3个文件:标准输入、标准输出和标准出错处理。这3个文件分别对应文件描述符为0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)。
不带缓存的文件I/O操作,这里指的不带缓存是指每一个函数只调用系统中的一个函数。主要用到5个函数:open、read、write、lseek和close。
open函数语法要点 所需头文件:#include//提供类型pid_t的定义 #include #include 函数原型:int open(const char *pathname,flags,int perms) 函数传入值: path:被打开文件名(可包括路径名) flag:文件打开的方式,参数可以通过“|”组合构成,但前3个参数不能互相重合。 O_REONLY:只读方式打开文件 O_WRONLY:可写方式打开文件 O_RDWR:读写方式打开文件 O_CREAT:如果文件不存在时就创建一个新文件,并用第三个参数为其设置权限。 O_EXCL:如果使用O_CREAT时文件存在,则可返回错误信息。这一参数可测试文件是否存在。 O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端。 O_TRUNC:如文件已经存在,并且以只读或只写成功打开,那么会先全部删除文件中原因数据。 O+APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件末尾。 perms:被打开文件的存取权限,为8进制表示法。 函数返回值:成功:返回文件描述符 失败:-1
Close 语法要点 所需头文件:#include 函数原型:int close(int fd) 函数输入值:fd:文件描述符 函数返回值:成功:0 出错:-1
Read函数语法要点 所需头文件:#include 函数原型:ssize_t read(int fd,void *buf,size_t count) 函数传入值 fd:文件描述符 Buf:指定存储器读出数据的缓冲区 Count:指定读出的字节数 函数返回值:成功:读出的字节数 0:已到达文件尾 -1:出错 在读普通文件时,若读到要求的字节数之前已达到文件的尾部,则返回字节数会小于希望读出的字节数。
Write函数语法要点 所需头文件:#include 函数原型: ssize_t write(int fd,void *buf,size_t count) 函数传入值: fd:文件描述符 Buf:指定存储器写入数据的缓冲区 Count:指定读出的字节数 函数返回值:成功:已写的字节数 -1:出错
Lseek函数语法要点: 所需头文件:#include #include 函数原型:off_t lseek(int fd,off_t offset,int whence) 函数传入值: fd:文件描述符 Offset:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移) Whence:当前位置的基点: SEEK_SET:当前位置为文件开头,新位置为偏移量的大小 SEEK_CUR:当前位置为文件指针位置,新位置为当前位置加上偏移量 SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量大小
函数使用实例: /**/ #include #include #include #include #include #include #include
int main(void) { char *buf="Hello! I'm writing to this file!"; char buf_r[11]; int fd,size,len; len = strlen(buf); buf_r[10] = '\0'; /*首先调用open函数,并指定相应的权限*/ if ((fd = open("hello.c", O_CREAT | O_TRUNC | O_RDWR,0666 ))<0) { perror("open:"); exit(1); } else printf("open and create file:hello.c %d OK\n",fd); /*调用write函数,将buf中的内容写入到打开的文件中*/ if ((size = write( fd, buf, len)) < 0){ perror("write:"); exit(1); } else printf("Write:%s OK\n",buf); /*调用lseek函数将文件指针移动到文件起始,并读出文件中的10个字节*/ lseek(fd, 0, SEEK_SET ); if ((size = read( fd, buf_r, 10))<0) { perror("read:"); exit(1); } else printf("read form file:%s OK\n",buf_r); if ( close(fd) < 0 ) { perror("close:"); exit(1); } else printf("Close hello.c OK\n"); return 0; }
| | | |
阅读(2254) | 评论(0) | 转发(1) |