文件操作系统调用_壹
2016-11-11 15:14
281 查看
目录:
1:概述
2:open、read、write、lseek、close
3:在文件中检索字符串,打印字符串所在的行并且返回文件的大小
1:概述
linux体现了“一切都是文件”的设计思想,所有的文件操作都是通过操作文件描述符来进行的,文件描述符是一个整形的变量,系统默认最大是1024,可以使用ulimit -a命令查询或者修改,系统已经分配的三个标准文件描述符,标准输入(stdin)、标准输出(stdout)、标准错误(stderr),分别为0,1,2,文件描述符为负值,说明出现错误;
2:open、read、write、lseek、close
2.1:open()
函数声明:
int open(const char *pathname, int flags);
int open(const char *payhname,int flags, mode_t mode);
open()函数依据标志flags和权限mode在pathname下创建或者打开一个文件,成功返回文件描述符,错误返回-1;
flags:表示以什么方式打开文件,常用的是O_RDWR/O_APPEND/O_NOBLOCK,分别对应读写、追加、非阻塞,如果O_CREAT,需要设置mode参数;
mode:表示创建文件的权限和ID,使用5个数字来表示文件的各种权限,分别为:用户ID、组ID、用户权限、组权限、其他人权限;如:10777;
2.2:read()和write()
函数声明:
int read(int fd,const void *buf,size_t length);
int write(int fd,const void *buf,size_t length);
两个函数的返回值都是读取或者写入的字节数;
2.3:lseek()
函数声明:
int lseek(int fd,offset_t offset, int whence);
lseek函数将文件读写指针相对whence移动offset字节,offset为正值,文件读写指针向后移动,为负值,文件读写指针向前移动,函数返回文件指针相对于文件头的位置;
whence可以用如些宏代替:
SEEK_SET:相对文件头;
SEEK_CUR:相对文件读写指针的当前位置;
SEEK_END:相对文件末尾;
例如:
将文件读写指针移动到文件末尾:lseek(fd,0,SEEK_END),函数返回文件指针相对于头文件的位置,也就是文件的长度;
2.4:close()
函数声明:
int close(int fd);
所有文件的操作只有等到执行close后才能操作成功,所以,一定要调用close函数关闭文件;
[b]3:在文件中检索字符串,打印字符串所在的行并且返回文件的大小
[/b]
[b]说明:代码简单的使用read函数,每次读取文件中的一个字节,然后判断是否是换行符(在linux系统下换行符为'\n'),如果是,将这行打印出来,最后返回文件的总大小;代码中每次是读取一字节的数据,所以本代码的执行效率很低,只为学习实践;[/b]
1:概述
2:open、read、write、lseek、close
3:在文件中检索字符串,打印字符串所在的行并且返回文件的大小
1:概述
linux体现了“一切都是文件”的设计思想,所有的文件操作都是通过操作文件描述符来进行的,文件描述符是一个整形的变量,系统默认最大是1024,可以使用ulimit -a命令查询或者修改,系统已经分配的三个标准文件描述符,标准输入(stdin)、标准输出(stdout)、标准错误(stderr),分别为0,1,2,文件描述符为负值,说明出现错误;
2:open、read、write、lseek、close
2.1:open()
函数声明:
int open(const char *pathname, int flags);
int open(const char *payhname,int flags, mode_t mode);
open()函数依据标志flags和权限mode在pathname下创建或者打开一个文件,成功返回文件描述符,错误返回-1;
flags:表示以什么方式打开文件,常用的是O_RDWR/O_APPEND/O_NOBLOCK,分别对应读写、追加、非阻塞,如果O_CREAT,需要设置mode参数;
mode:表示创建文件的权限和ID,使用5个数字来表示文件的各种权限,分别为:用户ID、组ID、用户权限、组权限、其他人权限;如:10777;
2.2:read()和write()
函数声明:
int read(int fd,const void *buf,size_t length);
int write(int fd,const void *buf,size_t length);
两个函数的返回值都是读取或者写入的字节数;
2.3:lseek()
函数声明:
int lseek(int fd,offset_t offset, int whence);
lseek函数将文件读写指针相对whence移动offset字节,offset为正值,文件读写指针向后移动,为负值,文件读写指针向前移动,函数返回文件指针相对于文件头的位置;
whence可以用如些宏代替:
SEEK_SET:相对文件头;
SEEK_CUR:相对文件读写指针的当前位置;
SEEK_END:相对文件末尾;
例如:
将文件读写指针移动到文件末尾:lseek(fd,0,SEEK_END),函数返回文件指针相对于头文件的位置,也就是文件的长度;
2.4:close()
函数声明:
int close(int fd);
所有文件的操作只有等到执行close后才能操作成功,所以,一定要调用close函数关闭文件;
[b]3:在文件中检索字符串,打印字符串所在的行并且返回文件的大小
[/b]
[b]说明:代码简单的使用read函数,每次读取文件中的一个字节,然后判断是否是换行符(在linux系统下换行符为'\n'),如果是,将这行打印出来,最后返回文件的总大小;代码中每次是读取一字节的数据,所以本代码的执行效率很低,只为学习实践;[/b]
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define LENGTH 1 #define B 0 #define KB 1 #define MB 2 #define GB 3 char buff[150]; long long size = 0; unsigned char flag = 0; int main(int argc,char **argv) { char index = 0; int fd = 0; if(argc != 4) { printf("usage: ./exe pathname string B/KB/MB/KB\r\n"); exit(0); } fd = open(argv[1],O_RDWR); /*文件已经存在,按照读写的方式打开文件*/ if(fd < 0) perror("file is not found:\r\n"); /*打开文件不成功,返回系统错误*/ while(read(fd,buff+index,LENGTH) > 0) /*每次读取一个字节*/ { if(buff[index++] == '\n') /*当遇到换行符,对取出来出来的这行数据进行字符串比较*/ { buff[index] = '\0'; if(strstr(buff,argv[2]) != NULL) /*找到字符串,将所在的行进行打印*/ printf("%s\r\n",buff); index = 0; } if(index > 149) { printf("too large,no enough free\r\n"); exit(0); } size++; } /*单位转换*/ if(memcmp(argv[3],"B",1) == 0) flag = 0; else if(memcmp(argv[3],"KB",2) == 0) flag = 1; else if(memcmp(argv[3],"MB",2) == 0) flag = 2; else if(memcmp(argv[3],"GB",2) == 0) flag = 3; switch(flag) { case B: printf("file size is: %lld Bytes\r\n",size); break; case KB: printf("file size is: %.6f KB\r\n",size/1024.0); break; case MB: printf("file size is: %.6f MB\r\n",size/(1024.0*1024.0)); break; case GB: printf("file size is: %.6f GB\r\n",size/(1024.0*1024.0*1024.0)); break; } close(fd); return 0; }
相关文章推荐
- 驱动学习日记2--文件操作系统调用
- 文件打开的过程——调用fd=open()时操作系统所做的工作
- Java代码调用操作系统可执行文件打开相应文件一行代码实现
- java使用jdic组件调用ie内核-实现调用本地操作系统文件
- linux 文件操作系统调用
- Linux操作系统下,通过系统调用和库函数分别实现对文件的拷贝
- linux 文件操作系统调用
- 文件打开的过程——调用fd=open()时操作系统所做的工作
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- 文件操作系统调用
- 操作系统的文件系统基本调用命令
- Python根据操作系统自动调用创建文件目录小脚本
- linux 文件操作系统调用
- 在ASP.NET程序中存储和调用word文件(转载)
- .Net/C# 应用程序直接读取本地 Cookies 文件 (由于 WinXP SP2 调用 API: InternetGetCookie 无果)
- 使用PB调用API自动更新(非FTP模式)(四、统计复制文件数量函数F_CONNECT_COPYCOUNT)
- 调用本地的程序打开制定文件
- VC中调用CHM帮助文件
- 如何在代码中调用“文件打开方式对话框”?
- 在ASP文件调用DLL