系统调用-文件访问

 

本文特色,该文件操作与linux操作系统shell命令对比讲解!

 

Linux中文件变成可以使用两种方法

1.Linux的系统调用

2.C语言函数的调用

前者是依赖于操作系统的

后者是c库函数一般不会变,在哪系统下都一样。

 一、文件的创建

linux操作系统shell创建文件     #mkdir doc1 doc2

 

int creat(const char *filenme, mode_mode)

* filename 为要创建的文件名

* mode:创建模式

 

一般创建的是在本文件路径下

如果你之前玩过linux操作系统,你就会明白:chmod 777 filename 的意义

 

常见的创建属性为:

S_IRUSR   4    可读

S_IWUSR   2    可写

S_IXUSR   1    可执行

S_IXWRU   7    可写读执行

 

 /************具体代码实现****************/

 

#include<stdio.h>  

#include<sys/types.h>

#include<sys/stat.h>     //后续要用到exit()函数;

#include<fcntl.h>

 

void create_file(char *filename)

{

 If(creat(filename,0755)<0){  //在这里表示已经执行了系统create函数,小于零表示创建文件不成功;  0755 代表权限一般为root user other访问文件权限

printf(creat file %s failure\n,filename)

exit(EXIT_FAILURE);

}else{

printf(reate file % success!\n,filename);

}

}

 
  

Int main(int argc,char *argv[]){ //argc文件参数,以前真的不知道这是啥意思,现在知道了,参数个数 第二个表示储存名字的数组;

 

Int i;

If(argc<2){   //表示参数只有一个,在这里只要明白创建文件,至少要两个参数就可以了.

Perror(you havent input the filename,lease tryagain !\n);

exit (EXIT_FAILURE);

}

For (i=1;i<argc;i++){

Creat_file(argv[i]);  //第一个rgv[1]用来放命令.]第二个参数(文件名)放在argv[2],

 

}

Exit(EXIT_SUCCESS);

)

 

}

 

二、系统调用_打开文件

linux操作系统shell文件打开     #cd doc1    #vi less more cat     doc1

实际上还是调用了以下函数进行实现

 

Int open(const char*pathname,int flag,mode_t mode);

参数O_CREATE参数,如果没有文件就独立创建一个文件;

#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 the open file pathname!\n);

Exit(1);

//参数一是文件路径,也就是文件名,第二个打开后可对其操作属性,如果没有就创建一个文件

If(fd=open(argv[1],o_creat,|O_RDWR,0755))<0){

Perror(open file filure !\n);

Exit(1);

}

Elae{

 

Printf(open file %d sucess!\n,fd);

}

Close (fd);

Exit(0);

}

 

}

 

三、系统调用_关闭

 

系统打开后会返回一个整数,也就是文件描述符,fd.

Int close(fd);

 

 :wd    退出shell并保存文件

 

四、系统调用_

 Int read(int fd ,const void *buf,size_tlength)

功能:

    从文件描述符fd所指定的文件中读取,也就是说在每次系统读取文件内容的时候要先打开文件,然后根据  fd 处开  始读文件。读多少个自己length 加载到buf所指向的缓冲区中。

    返回值为实际的读取的字节数。

    Int write(int fd,const void*buf,size_t length)

    Fd指向的文件中写入bufflength个字节。

 

五、系统文件调用—定位

 

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

功能:

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

 

系统调用—访问判断

有时候我们需要判断文件是否可进行某项操作读写等,这时我们可以使用acces函数。

Int accessconst char*pathnameint mode

Mode: R_ok

W_ok

X_ok

F_ok

返回值,测试成功返回0,不符合返回-1