文件IO编程之(二)read.write.lseek
时间:2010-10-20 来源:andyluo324324
下面认真分析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函数,在调试中已经明显地发现了这点。
----------------------------*/
#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函数,在调试中已经明显地发现了这点。
----------------------------*/
相关阅读 更多 +