用户名: 密码: 忘记密码? 注册

文件IO编程之(二)read.write.lseek

作者:  时间: 2010-10-20
下面认真分析write.c函数
#include<unistd.h>//包含必要的头文件
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAXSIZE
int main(void)
{
 int i,fd ,size,len;//定义有关变量
 char *buf ="hello ! I am writing to this file!";//定义一个字符串指针
 char buf_r[10];//定义一个数组
 len=strlen(buf);//求buf的长度
 printf("the len is %d\n",len);
 if((fd=open("/tmp/hello.c",O_CREAT | O_TRUNC |O_RDWR,0666))<0)//打开hello.c文件
 {
  perror("open :");
  exit(1);
 }
 else
 {
  printf("open file:hello.c %d\n",fd);
 }
 if((size=write(fd,buf,len))<0)//在hello.c文件里写数据,将buf中的内容写入到打开的文件中
 {
  perror("write:");//判断写是否成功
  exit(1);
 }
 else
 {
  printf("write:%s\n",buf);//打印buf里面的数据
 }
 lseek(fd,0,SEEK_SET);//将文件指针移到文件开始
 if((size=read(fd,buf_r,10))<0)//读出文件中的10个字节
 {
  perror("read:");
  exit(1);
 }
 else
 {
  printf("the reading size is %d\n",size);
  printf("read form file:%s\n",buf_r);
 }
 if(close(fd)<0)//关闭文件
 {
  perror("close:");
  exit(1);
 }
 else
 {
  printf("close hello.c\n");
 }
 exit(0);
}
/*--------------------------------
notes:
1.strlen(返回字符串长度)
1)表头文件:#include<string.h>
2)定义函数 size_t strlen(const char *s)
3)函数说明 strlen()用来计算指定的字符串s的长度,不包括结束字符"\0".
4)返回值 返回字符串s的字符数
2.write(将数据写入已打开的文件内)
1)所需头文件 #include<unistd.h>
2)函数原型 ssize_t write(int fd,void *buf,size_t count)
3)输入参数
fd:文件描述符
buf:指定存储器写入数据的缓冲区
count:指定写入的字节数
4)函数返回值
成功:已写的字节数
-1:出错
3.lseek
1)所需头文件 
#include<unistd.h>
#include<sys/types.h>
2)函数原型
off_t lseek(int fd,off_t offset,int whence)
3)函数入口参数
fd:文件描述符
offset:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可
正可负(向前移,向后移)
whence:当前位置的基点
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小
4)
成功:文件的当前位置
-1:出错
4.read
1)所需头文件:#include<unistd.h>
2)函数原型:ssize_t read(int fd,void *buf,size_t count)
3)输入参数
fd:文件描述符
buf:指定存储器读出数据的缓冲区
count:指定读出的字节数
4)函数的返回值
成功:读到的字节数
0:已到达文件尾
-1:出错
5)
在读普通文件时,若读到要求的字节数之前已到达文件的尾部,则返回字节数
会小于希望读出的字节数
注意:
在读写文件时,必须要移动文件指针,不然的话会出现问题,必须使用lseek函数,在调试中已经明显地发现了这点。
----------------------------*/