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]);


  • 相关阅读:
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Python位运算符
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3745526.html
Copyright © 2011-2022 走看看