Linux系统编程之文件

一.Linux文件描述符及文件编程的一般步骤

1.文件描述符

2.文件编程的一般步骤

二.Linux文件编程API

1.文件打开

函数原型:

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

需包含的头文件:

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

参数解释:

const char *pathname:要打开文件的路径

int flags:打开方式

mode_t mode:待创建文件的文件权限

返回值解释:

若打开成功则返回一个大于等于3的文件描述符,若打开失败返回-1

打开方式介绍:

O_RDONLY:以只读方式打开

O_WRONLY:以只写方式打开

O_RDWR:以可读可写方式打开

mode介绍:

数字介绍
S_IRUSR4可读权限
S_IWUSR2可写权限
S_IXUSR1可执行权限
S_IRWXU7可读,写,执行权限

补充:

在参数二int flags后指定以下宏可达到的效果:

O_CREAT:若文件未打开则创建文件

O_EXCL:若同时指定O_CREAT,而文件已存在,则函数返回-1

O_APPEND:写文件时在文件末尾追加内容

O_TRUNC:若文件有内容则打开时清空内容

使用示例:

fd = open("./file",O_RDWR|O_CREAT,0600);

2.写入文件

函数原型:

 ssize_t write(int fd, const void *buf, size_t count);

需包含的头文件:

#include <unistd.h>

参数解释:

int fd:文件描述符

const void *buf:缓冲区

size_t count:写入的大小

返回值解释:

若写入成功返回写入的字节数,失败则返回-1

特别注意;

在写入文件操作完成后,文件光标位置会在文件末尾处,若需读取,需先将光标位置移动到开头处

3.读取文件

函数原型:

 ssize_t read(int fd, void *buf, size_t count);

需包含的头文件:

#include <unistd.h>

参数解释:

int fd:文件描述符

const void *buf:缓冲区

size_t count:读取的大小

返回值解释:

若写入成功返回读取的字节数,失败则返回-1

4.创建文件

函数原型:

 int creat(const char *pathname, mode_t mode);

需包含的头文件:

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

参数解释:

const char *pathname:文件路径(创建到哪)

mode_t mode:文件权限

返回值解释:

若创建成功则返回一个大于等于3的文件描述符,若打开失败返回-1

5.移动光标

函数原型:

off_t lseek(int fd, off_t offset, int whence);

需包含的头文件:

 #include <sys/types.h>
 #include <unistd.h>

参数解释:

int fd:文件描述符

off_t offset:在移动到指定位置之后再进行偏移的偏移量

int whence:移动位置

返回值解释:

若移动成功则返回移动的字节数,若移动失败返回-1

whence介绍:

介绍
SEEK_SET文件头
SEEK_END文件尾
SEEK_CUR当前位置

函数妙用;

读取文件大小:将文件光标从开头处移到末尾处即可返回文件大小

三.实现cp命令

1.实现步骤

1.打开源文件

2.读取源文件

3.打开目标文件

4.将源文件中读取的数据传入到目标文件

5.关闭目标文件和源文件

注:想要在运行命令时传入参数,必须写main函数原型

int main(int argc, char **argv)

argc:参数总个数

argv:存储参数的数组(注:参数从下标1处开始存储)

2.源代码

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
        int fdSrc;
        int fdDes;
        int size;
        char *buf = NULL;

        fdSrc = open(argv[1],O_RDWR);

        size = lseek(fdSrc,0,SEEK_END);
        lseek(fdSrc,0,SEEK_SET);

        buf = (char *)malloc(sizeof(char) * size + 8);
        read(fdSrc,buf,size);

        fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);

        write(fdDes,buf,size);

        close(fdSrc);
        close(fdDes);
        free(buf);

        return 0;
}
~   

四.C语言库标准文件操作

1.C标准文件操作与Linux文件操作的区别

https://www.cnblogs.com/NickyYe/p/5497659.html

2.C标准文件操作API

foen,fwrite,fread,fseek,fclose,feof

1.函数原型

FILE *fopen(const char *pathname, const char *mode);

size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

int fclose(FILE *stream);

int fseek(FILE *stream, long offset, int whence);(使用方法同lseek函数)

int feof(FILE *stream);

2.fopen介绍

参数介绍;

const char *pathname:文件路径

const char *mode:打开方式

mode介绍:

返回值介绍:

成功返回一个文件指针,失败返回NULL

3.fwrite及fread介绍

参数介绍:

void *ptr:缓冲区

size_t size:要写入(读取)一个数据的大小

size_t nmemb:要写入(读取)数据的个数

FILE *stream:要写入(读取)数据的文件

返回值介绍:

若成功则返回写入(读取)的数据个数,失败则返回0

4.feof介绍

功能介绍:

判断文件是否到达末尾

参数介绍:

FILE *stream:要判断的文件

返回值介绍:

若到达末尾返回非零,若未到达末尾返回0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值