您的位置:首页 > 运维架构 > Linux

系统调用-文件访问 创建、打开、关闭、读、写

2017-03-18 17:14 309 查看
系统调用-文件访问
本文特色,该文件操作与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 haven’t 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指向的文件中写入buff中length个字节。

五、系统文件调用—定位

Int lseek(int fd,offset_t offset,int whence)
功能:
将文件读写的指针相对whence移动offset个字节。操作成功,返回指针相对于文件头的为位置。

系统调用—访问判断
有时候我们需要判断文件是否可进行某项操作读写等,这时我们可以使用acces函数。
Int access(const char*pathname,int mode)
Mode: R_ok
W_okX_okF_ok返回值,测试成功返回0,不符合返回-1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 操作系统 include
相关文章推荐