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

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


相关文章推荐

Linux系统调用及用户编程接口(API) open close write read lseek

系统调用:操作系统提供给用户程序调用的一组“特殊接口,可以通过这组接口获得操作系统内核提供的服务。例如:创建进程、实现进程调度、进程管理,进程间通信,文件系统控制,系统控制,存储管理,网络管理,soc...

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

AP I/O 笔记 文件的原子操作(stdio) 可用的文件I / O函数——打开文件、读文件、写文件等等。大多数Linux文件I / O只需用到5个函数:open、read、write、lsee...
  • AndGod
  • AndGod
  • 2012年04月13日 22:18
  • 843

文件操作编程一(open、close、read、write、lseek函数的使用)

open()函数

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

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

1.Linux应用编程---文件I/O(open、read、write、lseek、close)

文件描述符定义:对内核而言,文件描述符相当于一个文件的标识,它是一个非负整数,当打开(open)一个现有文件或者创建(creat)一个新文件时,内核会向进程返回一个文件描述符 在unix中(文件描述...

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
  • 12463

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

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

Linux 文件描述符(open,read,write,lseek,close)

http://blog.csdn.net/linuxmichael/article/details/5156790#   Linux系统可以看成是一个由文件组成的系统,在linux系统中,基本上所...
  • wdt3385
  • wdt3385
  • 2012年07月04日 16:06
  • 672

Linux中open、write、read、close系统调用

个人学习整理 如有不足之处 请不吝指教 open系统调用 open函数的三个参数: (1)path是已经存在的文件的路径; (2)oflags参数:若值为 O_RDONLY ,就以只读方式...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:liunx系统编程中的open(),close(),lseek(),write(),read()及相关例子
举报原因:
原因补充:

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