您现在的位置:主页 > 技术中心 > 操作系统 > Linux

linux低级文件编程(内核级别)

来源:网络 责任编辑:admin 发表时间:2013-07-01 05:22 点击:

   与高级文件编程使用FILE描述符不同的是,低级文件编程的文件描述符是一个非负整数。
1.文件的打开与创建
  #include<fcntl.h>
  int open(const char * filename,int oflag,.../*mode_t mode*/);
  --filename指定了打开或创建文件的路径名;
  --oflag制定了打开或创建文件的方式
  --mode是可选参数,决定新文件的模式,仅当创建文件时有效。
  当函数调用成功时,将为文件filename创建一个文件描述符并返回之,否则返回-1;
  参数oflag控制打开文件的读写方式{1.O_RDONLY、O_WRONLY、O_RDWR}、常规方式和同步方式;
2.文件的关闭与删除
  函数close关闭一个已经打开的文件,函数unlink删除文件,它们的原型为:
  #include<unistd.h>
  int close(int fildes);
  int unlink(char *path);
  注:只是用一次的临时文件,可以先删除再是用,这样子不必担心忘记删除文件而造成磁盘垃圾文件了。
/*-----临时文件使用模板unlink.c-----*/
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
void main()
{
  int fno;
  if((fno=open("./tmpfile",O_RDWR|O_CREAT|O_EXCL,0755))<0)
  {
     fprintf(stderr,"open file error!/n");
     return ;
  }
  unlink("./tmpfile");
  sleep(60);
  printf("end./n");
}
3.文件读写
#include<unistd.h>
ssize_t read(int fildes,void *buff,size_t nbytes);
ssize_t write(int fildes,const void *buff,size_t nbytes);
/*read函数从文件描述符fildes所指向的文件中读取nbytes个字节的数据到buff所指向的内存中去。如果read成功,函数返回实际读取的字节数;如果文件结束或参数nbytes值为0,函数返回为0;若调用出错,函数返回-1,并将错误码写入errno中。*/
/*write把buff所指向的内存数据向文件描述符fildes所指向的文件中写入nbytes个字节。如write成功,函数返回实际写入的字节数。否则返回-1,并将错误写入errno中*/
/*--------read.c------*/
#include<unistd.h>
void main()/
{
  char buff[11];
  printf("%d",read(0,buf,sizeof(buf)));
}
/*---------write.c-----*/
#include<unistd.h>
void main()
{
  char buf[10]="abcchina";
  printf("%d",write(1,buf,sizeof(buf)));
}
4.文件定位
#include<unistd.h>
off_t lseek(int fildes,off_t offset,int whence);
实例:函数lseek允许定位到当前文件最大位置之后,倘若定位成功并且写入数据,则文件将自动延长到写入位置,中间部分以0填充。但是若定位位置大大超过了当前文件长度,则UNIX操作系统只虚增文件长度,实际并不分配磁盘块。以下设计虚增文件的实例:
#include<unistd.h>
#include<fcntl.h>
void main()
{
  int fno;
  if((fno=open("hole.dat",O_WRONLY|O_CREAT,0755))<0)
  {
    printf("open file hole.dat failed./n");
    return ;
  }
  lseek(fno,1000000000,SEEK_SET);
  write(fno,"eee",3);
  close(fno);
}
5.文件缓冲
  函数fsync将缓冲信息写入文件中,它的原型为:
  #include<unistd.h>
  int fsync(int fildes);
  系统调用fsync将所有已写入文件描述符fildes的数据真正写到磁盘或其它设备中,类似于标准文件变成库fflush,当系统调用成功时返回0,否则返回-1。
 
6.复制文件描述符
  低级文件编程库中复制文件描述符的函数如下:
  #include<unistd.h>
  int dup(int fildes);
  int dup2(int fildes,int fildes2);
  函数dup复制文件描述符fildes到当前未使用的最小可用描述符中。函数dup2复制文件描述符fildes到描述符fildes2中,如果 fildes2已经打开,则关闭;如果fildes2与fildes值相等,则直接返回。这两个函数在调用成功时都返回新的文件描述符,否则返回-1。
7.文件控制
  1)文件锁
     多用户多任

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    用户名: 验证码:点击我更换图片

    推荐热点

    • /etc/fstab 详解
    • nginx主主集群
    •  LVS-NAT和LVS-DR模式的实现详解
    •  RHCE考试之磁盘配额
    • 学习笔记:ACL详解
    •  LVM逻辑卷管理器
    • suse linux双网卡双网关配置
    •  Nginx主主负载均衡架构
    • linux top命令详解

    快速直达

    ?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
    Copyright © 2004-2024 上海卓卓网络科技有限公司