liunx系统编程中的open(),close(),lseek(),write(),read()及相关例子

原创 2012年03月30日 15:04:32

Linux系统调用级别的函数有许多,这里只说明open(),close(),lseek(),write()和read()函数。

open()原型

int open(const char *pathname,flags,intperms)

参数定义:

pathname:路径名,例子: “/tmp/working/open.c”

             flags:文件打开方式。

                            O_RDONLY: 只读方式

                            O_WRONLY:只写方式

                            O_RDWR:读写方式  这三个是不能同时存在

 

                            O_CREAT:如果路径下没有该文件,如没有open.c,则创建open.c文件。

                            O_EXCL:如果使用了O_CREAT这个参数且文件存在时,返回错误。

                            O_NOCTTY:

                            O_TRUNC:如果文件存在,并且以只读或者只写成功打开,则会删除文件的数据。

                            O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾。

 

                   perms:打开的存取权限。

返回值:成功:文件描述符

       失败:-1

 

close()原型:

int close(int fd)

fd是文件描述符,是open()函数的返回值。

返回值:成功:0

                   失败:-1

 

#include<unistd.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdlib.h>

#include<stdio.h>

 

int main()

{

         intfd;

         if((fd= open("./hello.txt" , O_CREAT | O_TRUNC | O_WRONLY , 0666)) < 0)

         {

                   perror("open:");

                   exit(1);

         }

         else

         {

                   printf("Openfile : hello.c %d\n",fd);

         }

         if(close(fd) < 0 )

         {

                   perror("close:");

                   exit(1);

         }

         else

         {

                   printf("Closehello.c\n");

         }

         exit(0);

}


上面的程序起打开文件作用,如果没有,就创建。

read()函数

原型:ssize_t read(int fd,void *buf,size_t count)

fd:文件描述符

buf:指定存储器读出数据的缓存区

count:指定读出的字节数

返回值:

         成功:读到的字节数。

         0:达到了文件尾

         -1:出错

 

write()函数

原型:ssize_t write(int fd,void *buf,size_t count)

         fd:文件描述符

         buf:指定存储器写入数据的缓冲区

         count:指定读出的字节数

返回值:

         成功:已经写入的字数

         -1:出错

 

lseek:

原型:off_t lseek(int fd,off_t offset,int whence)

         fd:文件描述符

         offset:偏移量,单位是字节,可正可负。

whence:

                   SEEK_SET:文件头

                   SEEK_CUR:但钱位置

                   SEEK_END:文件尾

返回值:成功:文件当前位置

                   -1:出错

write.c文件

#include<unistd.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

 

int main(void)

{

         inti,fd,size,len;

         char*buf="Hello world,I will write this file!";

         if((fd= open("./hello.txt",O_CREAT | O_TRUNC | O_RDWR,0777 ))<0)

         {

                   perror("open:");

                   exit(1);

         }       

         else

                   printf("openhello.txt %d\n:",fd);

         len= strlen(buf);

         if((size=write( fd , buf , len )) < 0 )

         {

                   perror("write:");

                   exit(1);

         }

         else

                   printf("Write%s \n",buf);

         if(close(fd) < 0 )

         {

                   perror("close:");

                   exit(1);

         }

         else

                   printf("Closehello.txt\n");

         exit(0);

}


上面的程序就是创建一个文件,写入buf里面的内容。

 

 

read.c文件

#include<unistd.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

int main(void)

{

         intfd,len,size;

         charbuf_r[100];

         //if((fd=open("./hello.c",O_CREAT| O_RDWR,0777))<0)

         if((fd= open("./hello.txt",O_CREAT | O_RDWR,0777 ))<0)

         {

                   perror("open");

                   exit(1);

         }

         else

                   printf("openthe file hello.txt \nfd is %d \n",fd);

         len= lseek(fd,0,SEEK_END);

         printf("lenis %d\n",len);

         lseek(fd,0,SEEK_SET);     

         if((size= read(fd,buf_r,len))<0)

         {

                   perror("read");

                   exit(1);

         }

         else

         {

                   buf_r[len]='\0';                  

                   printf("sizeis %d\n",size);

                   printf("readfile is %s\n",buf_r);

                  

         }

         if(close(fd)<0)

         {

                   perror("close");

                   exit(1);

         }

         else

                   printf("thefile is close\n");

         exit(0);

        

}


其中len = lseek(fd,0,SEEK_END);

这段是测试文件长度的程序。


文件I/O函数(open,read,write,lseek,close)

大多数unix文件I/O只需要用到5个函数:open,read,write,lseek,close。这些函数都为不带缓存的I/O,不带缓存指的是每个read和write都调用内核中的一个系统调用。这些...
  • jiangqin115
  • jiangqin115
  • 2015年05月02日 12:28
  • 1029

Linux C flie操作: open write read lseek close函数分析

Linux C file操作: open write read lseek close函数分析
  • renlonggg
  • renlonggg
  • 2017年01月19日 11:35
  • 960

文件I/O编程 (open、read、write、lseek、close)

通常,一个进程打开时,都会打开3个文件:标准输入、标准输出和标准出错处理。这3个文件分别对应文件描述符为0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FI...
  • DiegoTJ
  • DiegoTJ
  • 2010年03月01日 15:23
  • 1616

Linux基础编程-文件操作open,lseek,read,write,close

Linux基础编程-文件操作open,lseek,read,write,closeLinux上面对文件的操作可以分为两种:1.Linux系统提供的API; 2.C标准的文件操作函数。前者依赖于Linu...
  • Yao_GUET
  • Yao_GUET
  • 2011年06月02日 11:10
  • 13021

嵌入式linux文件I/O编程 (open、read、write、lseek、close)

Normal 0 7.8 磅 0 2 false false false Microsof...
  • sunhy1021
  • sunhy1021
  • 2009年10月26日 14:09
  • 7898

linux驱动学习笔记1(简单实现open,read,write,ioctl)

以前开发过程中用过无数次的ioctl函数,一直不知道其内部如何实现的,最近正好在看这方面的资料,并结合网上的代码做了实践,这里记录下。 首先编辑一个驱动模块,取名demo.c #include #i...
  • taotaost
  • taotaost
  • 2017年08月02日 18:33
  • 491

read,write和lseek函数使用实例

资料出处:http://blog.chinaunix.net/space.php?uid=20589269&do=blog&id=1622122 更多嵌入式资料:http://blog.chinau...
  • wocjj
  • wocjj
  • 2012年04月18日 13:03
  • 1202

file operate in python (open write read close )

1. file open:     fd = open(N1,N2):N1:path of the file to be open like '/home/warrior/Downloads/tes...
  • warrior_zhang
  • warrior_zhang
  • 2016年01月12日 13:01
  • 418

【Linux&Unix--open/close/write/read系统调用】

open系统调用 函数原型及解释 【代码】          调用 open 可以打开一个已经存在的文件(普通文件、特殊文件或命名管道),或创建一个新文件,但它只能创建普通文件(创建特殊文件需要...
  • kana007
  • kana007
  • 2014年08月17日 00:40
  • 2702

对应于Linux中open, read, write, seek, close的windows API

文件的打开 FILE *fopen( "路径+文件名","读写模式"); FILE *fopen(const char *filename, const char *m...
  • wangjingfei
  • wangjingfei
  • 2009年10月28日 15:02
  • 4038
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:liunx系统编程中的open(),close(),lseek(),write(),read()及相关例子
举报原因:
原因补充:

(最多只允许输入30个字)