提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
通过用C/C++在Linux系统下实现cp指令,来学习熟悉Linux文件编程的常用API。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Linux文件编程常用API
文件的打开与创建
//代码示例
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd;
fd=open("./file1",O_RDWR);//第一个参数是文件名,第二个是操作权限
if(fd==-1){//如果fd(文件描述符)为负数则文件打开失败,重新创建一个
fd=open("./file1",O_RDWR|O_CREAT,0600);/*第二个参数多加了O_CREAT是
创建文件的意思,(0600)表示用户对此文件的(可读可写)操作权限*/
printf("creat file1 success!\n");
}
}
文件的写入
//代码示例
#include <unistd.h>
int main()
{
char *buf="hello world!";
int fd=open("./file1",O_RDWR);
int n_write=write(fd,buf,strlen(buf));/*第一个参数是fd(文件描述符),
第二个是写入的字符串,第三个参数字符串的长度*/
close(fd);//关闭文件
}
文件内容的读取
#include <unistd.h>
int main()
{
char *buf="hello world!";
int fd=open("./file1",O_RDWR);
int n_write=write(fd,buf,strlen(buf));//n_write为写入文件的字符个数
char *readbuf=(char*)malloc(sizeof(char)*n_write+1);/*定义一个指针,
并为其开辟n_write+1个空间*/
int n_read=read(fd,readbuf,n_write);//将文件里的内容读取到readbuf中
close(fd);
}
文件光标的移动
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);/*第一个参数fd(文件描述符)
,第二个光标在字符串中的位移量,正数向左负数向右*/
/*
注:
whence(当前位置,第三个参数):
SEEK_SET 文件头
SEEK_CUR 当前位置
SEEK_END 文件尾
*/
二、编程思路及代码示例
1.编程思路
1、打开src.c(源文件)
2、读取源文件中的信息到buf(存放内容的地址)
3、打开或创建des.c(目标文件)
4、将buf写入到des.c中
5、close两个文件
2.代码示例
代码如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc , char **argv)
{
int fdSrc;
int fdDes;
char *readBuf = NULL;
if(argc != 3){
printf("param error!\n");
exit(-1);
}
fdSrc = open(argv[1],O_RDWR);
int size = lseek(fdSrc,0,SEEK_END);
lseek(fdSrc,0,SEEK_SET);
readBuf = (char *)malloc(sizeof(char)*size + 8);
int n_read = read(fdSrc,readBuf,1024);
fdDes = open(argv[2],O_RDWR|O_CREAT,0600);
int n_write = write(fdDes,readBuf,strlen(readBuf));
close(fdSrc);
close(fdDes);
return 0;
}
总结
通过实现简单的CP指令从而熟悉Linux文件编程常用的API