• linux应用程序开发-文件编程-系统调用方式


    在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻,

    所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧!

    文件编程有两种方式,一是系统调用方式,二是库函数调用。

    前者依赖特定的平台,后者不依赖平台。

    系统调用:创建

    int creat(const char *filename,mode_t mode);

    filename:要创建的文件名

    mode:创建模式

    S_IRUSR->1

    S_IWUSR->2

    S_IWXUSR->4

    S_IRWXU->7

    系统调用举例:

    #include <stdio.h>

    #include<stdlib.h>

    #include<sys/types.h>

    #include<fcntl.h>

    void create_file(char *filename)

    {

      if(creat(fileanme.,0755)<0)

      {

      printf("create file %s is failuer! ",filename);

      }

      else

      {

       printf("create file %s is success! ",filename)

        }

    }

    int main(int argc,char *argv[])

    {

      int i;

      if(argc<2)

      {

      perror("you haven't input the filename ,please try agin! ");

      exit(EXIT_FAILUER);

      }

      for(i=1;i<argc;i++)

      {

        create_file(argv[i]);

      }

      exit(EXIT_SUCCESS);

    }

    文件描述:文件描述符 范围0-OPEN-MAX。早期允许每个进程打开20个。现在有些增长到1024个。

    系统调用-打开

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

    int open(const cahr*pathname,int falgs,mode_t mode);

    flags:打开标志

    O_RDONLY

    O_WRONLY

    O_RDWR

    O_APPEBD:追加方式打开

    O_CREAT:必须使用函数 int open(const cahr*pathname,int falgs,mode_t mode);

    O_NOBLOCK:非阻塞方式打开

    举例:

    #include<stdio.h>

    #include<stdlib.h>

    #include<sys/types.h>

    #include<sys/stat.h>

    #include<fcntl.h>

    int main(int argc,char *argv[])

    {

      int fd;

      if(argc<2)
      {

      puts("please input yhe open file pathname! ");

      exit(1);

      }

    if((fd=open(argv[1],O_CREAT|)CREAT_ORDWR,0755)<0)

    {

      perror("open file failuer! ");

      exit(1);

    }

      else

    {

      printf("open file %d is success! ",fd);

    }

      close(fd);

      exit(0);

    }

    文件关闭:

    int close(fd);

    系统调用-读

    int read(int fd ,const void *buf,size_t length);

    从文件描述符fd所指定的文件中读取length个字节到buf所指定的缓冲区,返回实际读取的字节数。

    写:int write(int fd ,const void *buf,size_t length);

    定位:

    int lseek(int fd,offset_t offset,int whence);

    将文件读写指针相对于whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。

    whence:

    SEEK_SET:相对文件开头

    SEEK_CUR:相对文件读写指针的当前位置

    SEEK_END:相对文件末尾

    计算文件长度:

    系统调用-访问判断:

    int  access(const char*pathname,int mode);

    mode:要判断的访问权限。可以取以下值或他们的组合

    R_OK

    W_OK

    X_OK

    F_OK:文件存在

    成功返回0,否则条件不符合则返回1。

    举例:

    #include<unistd.h>

    int main()

    {

      if(access("/etc/passwd",R_OK)==0)

      printf("/etc/passwd can be read!" );

    }

  • 相关阅读:
    位运算符设置权限
    urlencode、urldecode、rawurlencode、rawurldecod
    二分查找法的mid值 整数溢出问题
    GIT 常用命令
    nginx配置反向代理转发
    PHP实现无限极分类
    PHP面试题目整理(持续更新)
    去除input的默认样式
    git 常用指令
    数组去重
  • 原文地址:https://www.cnblogs.com/summer-xwq/p/4161957.html
Copyright © 2020-2023  润新知