linux读文件write()

文档

READ(2)                                                        Linux Programmer's Manual                                                        READ(2)

NAME
       read - read from a file descriptor

SYNOPSIS
       #include <unistd.h>

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

DESCRIPTION
       read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf.

       If count is zero, read() returns zero and has no other results.  If count is greater than SSIZE_MAX, the result is unspecified.

RETURN VALUE
       On  success,  the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this number.  It is not an
       error if this number is smaller than the number of bytes requested; this may happen for example because fewer bytes are actually available right
       now  (maybe  because we were close to end-of-file, or because we are reading from a pipe, or from a terminal), or because read() was interrupted
       by a signal.  On error, -1 is returned, and errno is set appropriately.  In this case it is left unspecified whether the file position (if  any)
       changes.

ERRORS
       EAGAIN The file descriptor fd refers to a file other than a socket and has been marked nonblocking (O_NONBLOCK), and the read would block.

       EAGAIN or EWOULDBLOCK
              The  file  descriptor  fd refers to a socket and has been marked nonblocking (O_NONBLOCK), and the read would block.  POSIX.1-2001 allows
              either error to be returned for this case, and does not require these constants to have the same value, so a portable application  should
              check for both possibilities.

       EBADF  fd is not a valid file descriptor or is not open for reading.

       EFAULT buf is outside your accessible address space.

       EINTR  The call was interrupted by a signal before any data was read; see signal(7).

需要注意需要使光标回到文件开始处,否则读取不到文件。

#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include<string.h>
#include<stdlib.h>
int main(){
        // file description
        int fd;
        char *buf = "helloworld\n";
        fd= open("./file1",O_RDWR);
        if(fd==-1){
                printf("open file1 fail\n");
                fd = open("./file1",O_RDWR|O_CREAT,0600);
                if(fd>0){
                        printf("create file1 success\n");
                }
        }
        printf("open success:fd=%d\n",fd);
        //     ssize_t write(int fd, const void *buf, size_t count);
        int n_write=write(fd,buf,strlen(buf));
        if(n_write !=-1){
                printf("write %d byte to file1\n",n_write);
        }
        close(fd);

        fd= open("./file1",O_RDWR);
        char *readBuf;
        readBuf =(char *)malloc(sizeof(char)*n_write+1);
        //     ssize_t read(int fd, void *buf, size_t count);  
        int n_read=  read(fd,readBuf,n_write);
        printf("read %d ,context:%s\n",n_read,readBuf);
        close(fd);
        return 0;

}
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值