文件I/O操作之文件的打开,创建,关闭和定位-基于Linux系统文件IO

1.

打开文件

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

int open(const char *pathname,int flag);    //打开一个现有的文件
int open(const char *pathname,int flags,mode_t mode);   //若文件不存在,则先创建它

//成功则返回文件描述副,否则返回-1
//pathname为文件的相对或绝对路径名

文件描述符从3开始(0,1,2被标准IO占用),依次被分配给打开的文件

flags取值:

O_RDONLY;   //只读
O_WRONLY;  //只写
O_RDWR;  //读写

O_CREAT;
O_EXCL;

O_NOCTTY;
O_TRUNG;
O_APPEND;
O_NONBOLCK;
O_NONELAY;
O_SYNC;

mode取值

S_ISUID;
S_ISGID;
S_SVTX;
S_IRUSR;
S_IWUSR;
S_IXUSR;
S_IRGRP;
S_IWGRP;
S_IXGRP;
S_IROTH;
S_IWOTH;
S_IXOTH;

组合mode

S_IRWXU;
S_IRWXG;
S_IRWXO;

示例:

打开文件

 1 #include<sys/types.h>
 2 #include<sys/stat.h>
 3 #include<fcntl.h>
 4 
 5 #include<stdio.h>
 6 #include<stdlib.h>
 7 #include<string.h>
 8 
 9 #define FLAGS O_WRONLY|O_CREAT|O_TRUNC
10 #define MODES S_IRWXU|S_IXGRP|S_IRGRP|S_IROTH|S_IXOTH
11 
12 int main(void)
13 {
14     const char *pathname;
15     int fd;
16     char pn[30];
17     printf("please input the pathname <30 strings:\n");
18     scanf("%s",pn);
19     pathname=pn;
20     if((fd=open(pathname,FLAGS,MODES))==-1)
21     {
22         printf("error can‘t open file! \n");
23         exit(255);
24     }
25     printf("OK ,file has been open!\n");
26     printf("fd=%d\n",fd);
27     return 0;
28 }

2.

创建文件

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int creat(const char *pathname,mode_t mode);

若成功,返回以只写方式打开的文件描述符,否则返回-1

注意:creat等效于

open(pathname,O_WRONLY|O_CREAT|O_TRUNC,mode);

创建文件并打开的新方式

open(pathname,O_RDWR|O_CREAT|O_TRUNC,mode);

3.

关闭文件

#include<unistd.h>
int close(int fd);

fd是文件描述符,成功返回0,出错返回-1

4.

定位文件

#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fd,off_t offset,int whence);

offset时定位的位移量大小,与whence参数有关

SEEK_SET;   //位移量就是据文件开头的offset字节
SEEK_CUR;   //距当前位置offset字节
SEEK_END;   //距文件尾offset字节

后两个参数允许取offset负值

 

可使用此方法获取文件当前位移量

off_t offset;
offset=lseek(fd,0,SEEK_CUR);

也可时使用此方法测试文件是否能被设置偏移量

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。