zoukankan      html  css  js  c++  java
  • read和write函数

    读函数read  
    ssize_t read(int fd,void *buf,size_t nbyte) 
    read函数是负责从fd中读取内容.成功时,read返回实际所读的字节数,假设返回的值是0,表示已经读到文件的结束了.
    小于0表示出现了错误.假设错误为EINTR说明读是由中断引起的, 假设是ECONNREST表示网络连接出了问题.
    写函数write  
    ssize_t write(int fd,const void *buf,size_t nbytes) 
    write函数将buf中的nbytes字节内容写入文件描写叙述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向套接字文件描写叙述符写时有俩种可能.  
    1)write的返回值大于0,表示写了部分或者是所有的数据.  
    2)返回的值小于0,此时出现了错误.我们要依据错误类型来处理.  假设错误为EINTR表示在写的时候出现了中断错误.  
    假设为EPIPE表示网络连接出现了问题(对方已经关闭了连接).









     Linux-read函数 收藏
     

    read函数(读取文件)

    read函数能够读取文件。读取文件指从某一个已打开地文件里,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。

    使用格式例如以下:

    number = read( ...

    read函数(读取文件)

    read函数能够读取文件。读取文件指从某一个已打开地文件里,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。

    使用格式例如以下:

    number = read(handle, buffer ,n) ;

    上述read调用函数中,各个參数的定义例如以下:

    handle: 这是一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据。

    buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去。

    n: 表示调用一次read操作,应该读多少数量的字符。

    number:表示系统实际所读取的字符数量。

    如果某个文件的长度是600字符,而n的值是512,则在第1次调用读这个文件时,系统能够正常地读取512个字符地内容,并将这些字符数量传给number变量,因此number的值将变为88。要第2次读取这个文件时,由于文件已经没有内容可供读取了,此时系统会返回0给number。另外,如果读取文件失败,系统将返回-1给number。

    比方一个有100个字节的文件,第一次读取10个字节,这时读取指针在第10个字节处。再次进行10个字节的读操作时,会接着第一次读的位置接着往后读。假设还想从開始读,可使用lseek函数定位。

    Code:

    #include "lyl.h"

    #define BUF 512

    main()

    {

    static char filename[]="t1.txt" ;

    char buffer[BUF] ;

    int handle ;

    int i ;

    int total = 0 ;

    handle = open(filename,O_RDONLY) ;

    if ( handle == -1 )

    {

    printf("[%s] create fail !!!!

    ",filename) ;

    exit(1) ;

    }

    else

    {

    while( (i = read(handle,buffer,BUF) ) > 0 )

    total =i ;

    }

    printf("The total character in 《%s》 is %d

    ",filename,total ) ;

    exit(0) ;

    }

    程序运行结果:

    The total character in 《t1.txt》 is 11

    $cat t1.txt

    1234567890

     

     

    【 read系统调用】  
       
    功能描写叙述:
    从文件读取数据。
     
    使用方法: 
    #include <unistd.h>

    ssize_t read(int fd, void *buf, size_t count);


    參数:  
    fd: 将要读取数据的文件描写叙述词。
    buf:  所读取到的数据的内存缓冲。
    count: 须要读取的数据量。
       
    返回说明:  
    成功运行时,返回所读取的数据量。失败返回-1,errno被设为下面的某个值  
    EAGAIN:打开文件时设定了O_NONBLOCK标志,而且当前没有数据可读取
    EBADF:文件描写叙述词无效,或者文件不可读
    EFAULT:參数buf指向的空间不可訪问
    EINTR:数据读取前,操作被信号中断
    EINVAL:一个或者多个參数无效
    EIO:读写出错
    EISDIR:參数fd索引的时文件夹


     备注:

    从串口读数据,仅仅读一次,数据没有读全。增加while后,则数据读全了。

    total_read_bytes=0;

    while(read_bytes=read(fd_485,buffer1,256)>0)

    {

    memcpy(buffer2+total_read_bytes,buffer1,read_bytes);

    total_read_bytes+=read_bytes;

    }

    for(i=0;i<total_read_bytes;i++)

    printf("0x%02lx ",buffer2[i]);


  • 相关阅读:
    插入排序
    dojo树的节点添加链接的例子
    Discuz 3x 配置问题
    mysql_connect() 不支持 请检查 mysql 模块是否正确加载
    IIS访问php页面问题,报告404错误
    Map使用操作系统内存的情况
    IT级别
    java类型和mysql类型的转换
    C++析构函数的自动调用问题
    c++中虚函数
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3745526.html
Copyright © 2011-2022 走看看