码迷,mamicode.com
首页 > 其他好文 > 详细

简单的文件操作

时间:2018-07-22 14:02:17      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:系统   术语   com   include   定位在   文件的   pcb   请求   sys   

前提:本文基于LInux系统的编程与学习

使用系统调用对文件进行操作。
open(2) close(2) read(2) write(2) lseek(2)

文件描述符。
进程 进程的本质是对程序执行的过程中,对计算机资源使用情况的描述。
每个进程都有自己的pid。每个进程都有自己的户口本。户口本里记录了进程对资源的使用情况。进程的户口本专业术语叫PCB(进程控制块)。

文件描述符是记录在PCB的成员中<数组的下标>

技术分享图片

int open(const char *pathname, int flags,...);
功能:打开(有可能创建)一个文件
参数:
pathname:指定了要打开的文件的路径
flags:
3选1
O_RDONLY:只读
O_WRONLY:只写
O_RDWR: 读写

O_CREAT:如果文件不存在,创建文件。第三个参数指定了新文件的权限。

O_EXCL:这个和上个标记一起被使用的时候。当创建一个新文件的时候,文件存在,报错。如果文件不存在,创建一个新的文件。

O_TRUNC:创建文件的时候,如果文件存在,将文件的内容清0.
O_APPEND:以追加方式打开文件,文件的写的位置定位在文件的末尾。


...:可变参数。
返回值:
成功 返回新的文件描述符
错误 -1 errno被设置

 

close(2)
#include <unistd.h>
int close(int fd);
功能:关闭文件描述符
参数:
fd:指定了要被关闭的文件描述符
返回值:
成功 0
错误 -1 errno被设置

 

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从指定的文件描述符读取数据
参数:
fd:指定文件描述符,从该文件描述符读取数据
buf:存放读取数据的内存的首地址
count:最多读取的字节数,请求读取的字节数
返回值:
错误 -1 errno 被设置
成功 返回读取的字节数 (0代表文件的末尾) 如果返回值小于请求的字节数,这不是错误。说明已经接近文件的末尾

 

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
功能:把数据写入到一个文件描述符
参数:
fd:指定了目标文件描述符 向该文件描述符中写数据
buf:存放数据的缓冲区的位置,将buf指定的缓冲区中的数据写到文件中
count:申请的写入的字节数
返回值:
错误 -1 errno被设置
成功 写入的字节数 (0代表什么都没做) 如果返回的字节数小于申请的字节数,不是错误,这可能是由于磁盘空间已经满了

 

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
功能:重新定位文件的读写位置
参数:
fd:要操作的文件的描述符
offset:指定了字节数,具体的读写位置需要这个参数和whence一起决定
whence:
SEEK_SET The offset is set to offset bytes.
读写的位置=0+offset

SEEK_CUR The offset is set to its current location plus
offset bytes.
读写位置=当前位置+offset

SEEK_END The offset is set to the size of the file plus
offset bytes.
读写位置=文件的大小+offset

返回值:
错误 -1 errno被设置
成功 偏移位置的字节数。相对于文件的头部

 1 #include <stdio.h>
 2 #include <sys/types.h>
 3 #include <sys/stat.h>
 4 #include <fcntl.h>
 5 
 6 int main(int argc,char *argv[]){
 7     //打开文件,以只读方式打开文件
 8     int fd=open(argv[1],O_RDONLY);
 9     if(fd==-1){
10         perror("open");
11         return -1;
12     }
13     //定位到第一个空格
14     lseek(fd,6,SEEK_SET);
15     //从文件读取四个字节的数据
16     int buf;
17     read(fd,&buf,sizeof(int));
18     //将读取到的数据输出
19     char *p=(char *)&buf;
20     printf("%c",*p++);
21     printf("%c",*p++);
22     printf("%c",*p++);
23     printf("%c",*p++);
24     printf("\n");
25 
26     //关闭文件描述符
27     close(fd);
28     return 0;
29 }

 

简单的文件操作

标签:系统   术语   com   include   定位在   文件的   pcb   请求   sys   

原文地址:https://www.cnblogs.com/qiuyuwutong/p/9349835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!