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

时间:2023-03-08 17:08:13

在看韦东山视频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!\n",filename);

  }

  else

  {

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

    }

}

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

{

  int i;

  if(argc<2)

  {

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

  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!\n");

  exit(1);

  }

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

{

  perror("open file failuer!\n");

  exit(1);

}

  else

{

  printf("open file %d is success!\n",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!"\n);

}