gcc文件系统编程初阶<1>

ZDNet软件频道 时间:2002-08-05 作者:pianopan |  我要评论()
本文关键词:GCC close open read write
本文章主要是讲解以下的几个函数的应用 open,close read,write 他们的主要作用是对文件进行打开,关闭,读取,写入的功能.

本文章主要是讲解以下的几个函数的应用

open,close read,write

他们的主要作用是对文件进行打开,关闭,读取,写入的功能.

其函数原型如下:

===========================================
头文件
 #include<sys/types.h>
 #include<sys/stat.h>
 #include<fentl.h>
原型
 int open(const char *pathname,flags,int perms);
参数作用
 pathname 被打开的文件名
 flag 文件打开的方式
  1.O_RDONLY:只读方式打开文件
  2.O_WRONLY:可写方式打开文件
  3.O_RDWR:读写方式打开文件
  4.O_CREAT:如果文件不存在,就创建一个新的文件,并用第三的参数为其设置权限
  5.O_EXCL:如果使用O_CREAT时,文件存在,则可返回错误消息
  6.O_NOCTTY:使用其时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端
  7.O_TRUNC:如文件已经存在,那么在写入之间线删除原有数据
  8.O+APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾。
  (前三个互斥,在使用无意义组合,系统不予处理)
 perms 背带开文件的存取权限
返回值
 文件的描述字
功能
 打开文件

===========================================
头文件
 #include<unistd.h>
原型
 int close(int fd)
参数作用
 fd 文件描述字 
返回值
 成功返回0 错误返回-1
功能
 关闭文件

===========================================
头文件
 #include<unistd.h>
原型
 int read(int fd,void *buf,int count);
参数作用
 fd 文件描述字 
 buf 输入缓冲
 count 每次读取的字节数量
返回值
 返回0 读到了eof
 返回-1 读的过程有错误
 >0 读取的字节数
功能
 读文件

===========================================
头文件
 #include<unistd.h>
原型
 int write(int fd,void *buf,int count);
参数作用
 fd 文件描述字 
 buf 输出缓冲
 count 每次写取的字节数量
返回值
 写入的字节数
功能
 读文件

 用这几个函数,我们就可以做些简单的程序,下面是一个文件显示程序,显示文本文件的内容(你也可以显示非文本文件,只要你看的懂)
 请使用GCC -o type type.c编译,然后用./type type.c来试一下

//type.c
//www.beeship.com
//pianopan@beeship.com
//2002-1-12
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define PERMS 0666
#define DUMMY 0

main(argc,argv)
int argc;
char *argv[];
{
 int source_fd,target_fd,num;
 char iobuffer;

 if(argc!=2)
 {
  printf("ERROR:Canshubugou. ");
  exit(1);
 }


 if((source_fd=open(*(argv+1),O_RDONLY,DUMMY))==-1)
 {
  printf("ERROR:wenjiandabukai. ");
  exit(1);
 }

 printf(" ===========BeeShip Type=========== ");
 
 printf("File name : %s ",*(argv+1));

 while((num=read(source_fd,&iobuffer,1))>0)
  printf("%c",iobuffer);

 printf(" ===========BeeShip Type=========== ");

 return 0;
}


 上面的程序只使用了我们所说的3个函数,那么在编一个copy命令,代码如下:
 请使用GCC -o copy copy.c编译

//type.c
//www.beeship.com
//pianopan@beeship.com
//2002-1-14
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define PERMS 0666
#define DUMMY 0
#define BUFSIZE 1024


int bs_copyfile(char *file_name1,char *file_name2)
{
 //www.BeeShip.com
 //PianoPan (Email PianoPan@BeeShip.com)
 //2002-2-5am

 //file copy function

 int source_fd,target_fd,num;
 char iobuffer[BUFSIZE];

 //open the source file
 if((source_fd=open(file_name1,O_RDONLY,DUMMY))==-1)
  return 1;

 if((target_fd=open(file_name2,O_WRONLY|O_CREAT,PERMS))==-1)
  return 2;

 while((num=read(source_fd,iobuffer,BUFSIZE))>0)
  if (write(target_fd,iobuffer,num)!=num)
   return 3;

 close(source_fd);
 close(target_fd);

 return 0;
}

main(argc,argv)
int argc;
char *argv[];
{
 int i;

 if(argc!=3)
 {
  printf("ERROR:copy Source Target. ");
  exit(0);
 }

 i=bs_copyfile(*(argv+1),*(argv+2));

 switch(i)
 {
 case 1:
  printf("1");
  break;
 case 2:
  printf("2");
  break;
 case 3:
  printf("3");
  break;
 default:
  printf("0");
 }

 return 0;

}


 这两个程序程序都没有移动文件的描述字,让我们下次在讲解一下其他文件操作函数。

以上代码均通过RedHat7.2下GCC编译测试


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134