关闭

linu学习笔记(四):write,read函数

标签: c语言linux
191人阅读 评论(0) 收藏 举报
分类:

先上一段代码:

#include<string.h>
#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<error.h>
#include<stdlib.h>
/*自定义的错误处理函数*/
void my_err(const char *err_string,int line)
{
    fprintf(stderr,"line:%d ",line);//stderr 输出到标准显示设备
    perror(err_string);             //打印错误信息
    exit(1);
}
/*自定义的读数据函数*/
int my_read(int fd)
{
    int len;
    int ret;
    int i;
    char read_buf[64];                           //定义一个字符数组用来当做缓冲
   /*获取文件长度并保持文件读写指针在文件开始处*/
    if(lseek(fd,0,SEEK_END)==-1){                //移动到文件尾部
	my_err("lseek",__LINE__);
    }
    if((len=lseek(fd,0,SEEK_CUR))==-1) {         //获取文件当前的偏移相对于文件开头
        my_err("lseek",__LINE__);
    }
    if((lseek(fd,0,SEEK_SET))==-1) {             //移动到文件开头
        my_err("read",__LINE__);
    }
    printf("len:%d\n",len);
    /*读数据*/
    if((ret=read(fd,read_buf,len))==-1){
	my_err("read",__LINE__);
    }
    /*打印数据*/ 
    for(i=0;i<len;i++){
	printf("%c",read_buf[i]);
    }
    printf("\n");
    return ret;
}

int main()
{
    int fd;
    char write_buf[32] ="hellow world";
    /*在当前目录下创建文件example_63.c*/
    //if((fd=creat("example_63.c",S_IRWXU))==-1){                             
    if((fd=open("example_63.c",O_RDWR|O_CREAT|O_TRUNC,S_IRWXU))==-1){    //创建一个可读写的文件 如果这个文件存在则把内容清空 清空的参数是
	my_err("open",__LINE__);                                         //O_TRUNC ,S__IRWXU是设置用户操作文件的权限。
    }else{
        printf("creat file success\n");
    }
    /*写数据*/
    if(write(fd,write_buf,strlen(write_buf))!=strlen(write_buf)){    //如果写入数据不等于原来数据的长度则打印错误信息
        my_err("write",__LINE__);
    }
    my_read(fd);                                                       //调用读取函数读取数据这个行应该是删除多打了一行
    /*演示文稿*/
    printf("/*-------------------------*/\n");
    if(lseek(fd,10,SEEK_END)==-1){
	my_err("write",__LINE__);
    }
    my_read(fd);
    close(fd);
    return 0;
}
两个子函数一个用来处理错误主要调用perror()这个函数,这个函数之前笔记应该学过英文解说:The  perror()  function produces a message on standard error describing the last error encountered during a call to a system or  library  function.主要用于对上次调用系统或者库函数出错时的错误描述首先先打印括号中的字符然后才是错误的内容。

第二个子函数是用来读数据的,其中有个__LINE__参数是用来打印当前行号的,当运行出错时会很方便的显示出当前错误代码的行号。关于代码的解释放在代码注释中

 

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14202次
    • 积分:343
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:4篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论