Linux系统下文件的通用操作方法
2018-06-18 04:12:20来源:未知 阅读 ()
每一个系统下都有对文件操作的应用,但是都大致相同,同样在Linux系统中也同样拥有对文件的操作。如:文件描述符、open()函数、close()函数、read()函数、write()函数、文件偏移lseek()函数、获取文件状态fstat()函数、文件空间映射mmap()函数、取消mmap()映射的munmap()函数、文件属性fcntl()函数和文件输入输出控制ioctl()函数。此处主要说open()函数、close()函数、read()函数、write()函数
一、文件描述符
文件描述符是一个整形的数据,所有对文件的操作都通过文件描述符实现。在Linux系统中用文件描述符表示设备文件和普通文件。文件描述符是文件系统中连接用户空间和内核空间的枢纽。而文件描述符的范围为0~OPEN_MAX,它是一个有限的资源,在使用完毕后需要及时释放。
在Linux系统中有3个已经分配的文件描述符,即标准输入、标准输出和标准错误,它们的文件描述符的值分别为0、1和2.
二、打开创建文件open()、create()函数
open()函数的原型:
1 int open(const char *pathname,int flags); 2 int open(const char *pathname,int flags,mode_t mode);
对于open()函数,在使用时需要包含头文件sys/types.h、sys/stat.h、fcntl.h。通常在用户通过open()函数打开pathname指定的文件后,该函数会返回一个值,如果打开成功,返回一个整形的文件描述符。再出错时会返回-1。对于pathname所指的是一个字符串变量,该字符串变量的长度一般为1024个字节。对于超过这个大小以后,系统会自动截断,选择最前面的字节操作。
对于flags变量是文件标志变量,用于判定文件的打开方式,其中文件的打开方式可以为只读、只写或读写方式打开,分别用O_RDONLY、O_WRONLY、O_RDWR表示,并且在打开文件的方式时必须使用这三种方式中的其一。在这三个参数中O_RDONLY通常定义为0、O_WRONLY定义为1、O_RDWR定义为2。
除这上述的三种打开方式外还有其他的一些参数。
如:O_APPEND:使每次对文件进行写操作都追加到文件的尾端。
O_CREAT:如果文件不存在则创建文件
O_EXCL :查看文件是否存在,如果存在则返回-1
O_TRUNC:将文件的长度截断为0.如果此文件存在,并且文件成功打开,则会将其长度截断为0。
O_NONBLOCK:以非阻塞方式打开文件,默认的是阻塞方式。
1 #include<sys/types.h> 2 #include<sys/stat.h> 3 #include<fcntl.h> 4 #include<stdio.h> 5 int main(void) 6 { 7 int fd = -1; 8 char filename[]="test.txt"; 9 fd = open(filename,O_RDWR); 10 if(fd == -1) 11 printf("文件打开失败!,fd:%d\n",fd); 12 else 13 printf("文件 %s 打开成功!,fd:%d\n",filename,fd); 14 return 0; 15 }
二、关闭文件close()函数
close()函数关闭一个打开的文件,之前打开文件所占用的资源。
close()函数的原型:
1 #include<unistd.h> 2 int close(int fd);
close()函数关闭的是一个文件描述符,关闭以后此文件描述符不再指向任何文件,从而文件描述符可以再次使用。当函数执行成功时返回0,执行错误时返回-1.
close()函数的例子:
1 #include<sys/types.h> 2 #inlcude<sys/stat.h> 3 #include<fcntl.h> 4 #include<unistd.h> 5 #include<stdio.h> 6 int mian(void) 7 { 8 int fd=0; 9 fd=open("test.txt",O_RDONLY); 10 if(fd >0) 11 printf("文件打开成功!,fd:%d\n",fd); 12 else 13 { 14 printf("文件打开失败!\n"); 15 exit(0); 16 } 17 close(fd); 18 return 0; 19 }
三、读取文件read()函数
read()函数从打开文件中读取数据,用户可以对读入的数据进行操作。
read()函数的原型:
1 #include<unistd.h> 2 ssize_t read(int fd,void *buf,size_t count);
read()函数从文件描述符fd对应的文件中读取count字节,放到buf开始的缓存区中,如果count为0,read()函数返回0;如果count大于SSIZE_MAX,结果不可预料。当read()函数的返回结果为-1时,说明读取函数有错误,在达到文件末尾时,返回0。
在使用read()函数时,count请求的字节数量,read()函数不一定能够读取这么多数据,在很多中情况下可以使实际上读取的字节数小于请求读取的字节数。
如:
(1)、读取普通文件时,文件中剩余的字节数不够请求的字节数。
(2)、当从中断设备数据的时候,其默认长度不够read()函数请求读取的字节数。
(3)、当从网络读取数据时,缓存区大小有可能小于读取请求的数据大小。
read()函数的例子:
1 #include<sys/types.h> 2 #include<sys/stat.h> 3 #include<fcntl.h> 4 #include<unistd.h> 5 #include<stdio.h> 6 int main(void ) 7 { 8 int fd = -1,i; 9 ssize_t size = -1; 10 char buf[10]; 11 char filenema[]="test.txt"; 12 13 fd = open(filename,O_RDONLY); 14 if(fd == -1) 15 printf("文件 %s 打开失败!,fd: %d\n",filename,fd); 16 else 17 printf("文件 %s 打开成功!,fd: %d\n",filename,fd); 18 while(size){ 19 size =read(fd,buf,0); 20 if(size == -1) 21 { 22 close(fd);printf("文件读取失败!\n"); 23 } else{ 24 if(size > 0){ 25 printf("read %ld bytes:",size); 26 for(i = 0;i<size;i++) printf("%c",*(buf+i)); 27 printf("\n"); 28 }else printf("到达文件末尾\n"); 29 } 30 } 31 close(size); 32 return 0; 33 }
四、写文件write()函数
write()函数向打开的文件中写入数据,将用户的数据保存到文件中。与read()函数的含义相似,write()函数向文件描述符fd写入数据,数据的大小由count指定,buf为要写如数据的指针,write()函数返回值为成功写入数据的字节数。当文件写入失败时,该函数会返回-1。
write()函数的原型:
1 #include<unistd.h> 2 ssize_t write(int fd,const void *buf,size_t count);
write()函数例子:
1 #include<sys/types.h> 2 #include<sys/stat.h> 3 #include<fcntl.h> 4 #include<string.h> 5 #include<stdio.h> 6 #include<unistd.h> 7 int main(void) 8 { 9 int fd = -1; 10 ssize_t size = -1; 11 char buf[]="quick brown fox jump over the lazy dog"; 12 char filename[]="test.txt"; 13 14 fd = open(filename,O_RDWR); 15 if(-1==fd) 16 printf("文件 %s 打开失败,fd:%d\n",filename,fd); 17 else 18 printf("文件 %s 打开成功,fd:%d\n",filename,fd); 19 size = write(fd,buf,strlen(buf)); 20 printf("写入%ld个字节到文件 %s 中\n",size,filename); 21 close(fd); 22 return 0; 23 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:二级c程序设计题(2)
下一篇:c语言的学习秘籍
- QT5 解析JSON文件 2020-06-09
- QTableView与Excel之间的文件打开与保存 2020-05-26
- Building & Debugging chromium on CLion for Linu 2020-05-19
- 学生信息管理系统.cpp(大二上) 2020-04-23
- 非常详细的 Linux C/C++ 学习路线总结!已拿腾讯offer 2020-03-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash