linux文件编程-苏嵌实训第11天

一.linux系统调用及用户编程接口(API)
      1. 系统调用
      操作系统提供给用户的一组“特殊接口”,用户可以通过该接口获得操作系统内核题供服务。
      运行空间分为内核空间和用户空间(内核态和用户态)。分类目的;保护内核空间。它们运行在不同级别上,在逻辑上是相互隔离的。因此用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。
     2.用户编程接口(API)
     是实现系统调用与程序员进行交互的中间桥梁。
     3.系统命令
比API更高一层,内部引用了API来实现相应的功能。
     以上几个的关系:
               
二.linux中文件及文件描述符
     “一切皆为文件”,在linux中对目录和设备的操作都等同于对文件的操作。
       文件分类:普通文件,目录文件,链接文件,设备文件。
       文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程的记录表中。
        
      1.系统调用创建:
      int creat(const char *filename,mode_t mode)
     filename:创建的文件名(包含路径,缺省为当前路径)
     mode:创建模式
     2.常见的创建模式:
     S_IRUSR       可读        4
     S_IWUSR      可写        2 
     S_IXUSR       可执行     1
     S_IXRWU     可读、可写 、可执行  7
    例如:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcnt1.h>

void create__file(char *filename)
{
     if(create(filename,0755)<0)
     {
          printf("create file %s failure!\n",filename);
          exit(EXIT_FAILURE);
     }
    else
    {
           printf("create file %s success!\n",filename);
    }
}

int main(int argc,char *argv[ ])
{
    int i;
    if(argc<2)
    {
         printf("you haven't input the filename,please try again!\n");
         exit(EXIT_FAILURE);
    }

    for(i=1;i<argc;i++)
    {
         create_file(argv[i]);
    }

    exit(EXIT_SUCCESS);
}
      3.系统调用打开
      int open(const char *pathname,int flags);
      int open(const char *pathname,int flags,mode_t mode);  
      返回值:成功返回新分配的文件描述符,出错返回-1并设置errno。
参数含义:pathname是要打开或创建的文件的名字。
               flags参数可用来说明此函数的多个选择项。
               mode对于open函数而言,仅当创建新文件时使用第三个参数。
     4.系统调用读
        int read(int fd,const void *buf,size_t length)
        从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。
     5.系统调用写
        int write(int fd ,const void *buf ,size_t length )
        把length个字节从buf指向的缓冲区中写到文件描述符所指向的文件中,返回值为 实际写入的字节数。
     6.系统调用定位
        int lseek(int fd ,offset_t offset ,int whence )
        将文件读写指针相对whence移动offset个字节。操作成功时,返回文件 指针相对于文件头的位置。
        whence可使用下述值:
        SEEK_SET:相对文件开头
        SEET_CUR:相对文件读写指针的当前位置
        SEET_END:相对文件末尾
        offset可去负值,表示向前移动。
例子:lseek(fd,0,SEET_END);这是计算文件长度的函数。
注:库函数的创建、打开、读写,很多地方有相似之处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值