不带缓存的文件I/O操作

我们知道在嵌入式Linux中一切皆为文件,主要有这几种文件:-表示的普通文件;d表示的目录文件;l表示的链接文件;c表示的字符设备;b表示的块设备;p表示的管道文件,如FIFO文件;f表示的堆栈文件,如LIFO

       不带缓存的文件I/O操作主要用到6个函数creatopenreadwritelseekclose。这里的不带缓存是指每一个函数都只调用系统中的一个函数,这些函数虽然不是ANSI C的组成部分,但是是POSIX的组成部分。下面分说一下6个函数:

        creat函数:

                      表头文件为:#include
                                         #include
                                         #include

                        函数定义为:int creat(const char * pathname, mode_tmode);(当一个文件已存在,重新创建一个文件会被覆盖,但不报错;当新建文件名与文件重名时会报错。)

                        参数pathname指向欲建立的文件路径字符串。creat( )相当于使用下列的调用方式调用open( )

                        creat( )会返回新的文件描述词,若有错误发生则会返回-1,并把错误代码设给errno

                        

          open函数:

                         表头文件为:#include
                                         #include
                                         #include

                         函数定义为:int open( const char * pathname, int flags);

                                             int open( const char * pathname,int flags, mode_t mode);(使用access( )作为用户认证的判断要特别小心,例如,在access( )后再进行open( )空文件操作可能会造成系统安全上的问题)。

                         参数pathname指向欲打开的文件路径字符串,下列是参数flags所能使用的旗标,比较常用的有:
                        O_RDONLY:以只读方式打开文件。
                        O_WRONLY:以只写方式打开文件。                        

                        O_RDWR:以可读写方式打开文件。

                       上述三种旗标是互斥的,也就是说它们不可同时使用,但可与下列的旗标利用OR|)运算符组合。
                        O_CREAT:若欲打开的文件不存在则自动建立该文件。

                        O_APPEND:当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。


        write函数:

                        表头文件:#include

                        函数定义:ssize_t write (int fd,const void * buf,size_t count);

                        说明:write( )会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。

                        返回值:如果顺利,write( )会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。

 

          read函数:

表头文件:#include

                         函数定义:ssize_t read(int fd,void * buf ,size_t count);

                         说明:read( )会把参数fd所指的文件传送count个字节到buf指针所指的内存中。若参数count0,则read( )不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。

                          返回值:如果顺利,read( )会返回实际读到的字节数,最好能将返回值与参数count作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read( )被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。

 

         lseek函数:

                         表头文件:#include
                                         #include

                         函数定义:off_t lseek(int fildes,off_t offset ,int whence);

                         说明:每一个已打开的文件都有一个读写位置,在打开文件时通常其读写位置指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。当read( ) write( )时,读写位置会随之增加,lseek( )便是用来控制该文件的读写位置的。参数fildes为已打开的文件描述词;参数offset为根据参数whence来移动读写位置的位移数,参数whence为下列其中一种。
                              SEEK_SET:参数offset即为新的读写位置。
                                SEEK_CUR:以目前的读写位置往后增加offset个位移量。
                                 SEEK_END:将读写位置指向文件尾后再增加offset个位移量。
                                    whence值为SEEK_CURSEEK_END时,参数offet允许负值的出现。下列是较特别的使用方式:
                             欲将读写位置移到文件开头时,lseekint fildes,0,SEEK_SET)。
                        欲将读写位置移到文件尾时,lseekint fildes0,SEEK_END)。
                  想要取得目前文件位置时,lseekint fildes0,SEEK_CUR

                         返回值:当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节;若有错误则返回-1errno会存放错误代码。

 

          close函数:

                         表头文件:#include

                         函数定义:int close(int fd);

                         说明:close( )用来关闭open( )打开的文件。

                         返回值:若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno

 

          代码示例:文件的(创建、打开、写入、读取、关闭)



不带缓存的文件I/O操作_第1张图片

不带缓存的文件I/O操作_第2张图片

不带缓存的文件I/O操作_第3张图片

不带缓存的文件I/O操作_第4张图片



编译结果

不带缓存的文件I/O操作_第5张图片


你可能感兴趣的:(不带缓存的文件I/O操作)