Linux文件编程阶段练习

文章提供了C语言实现文件操作的示例,包括模拟Linux中的cp命令,通过读取原文件内容并写入目标文件来复制文件。另外,还展示了如何修改配置文件,找到特定内容并进行替换。最后,文章演示了如何向文件写入结构体数组,并从文件读取出来打印其内容,尽管直接查看文件内容可能会出现乱码,因为文件以字符方式存储非字符数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.文件操作练习-模拟实现cp命令

 
实现思路:

1.open原文件

2.读取原文件内容到到缓冲区

3.open|creat目标文件 

4.将缓冲区的内容写入目标文件

5.关闭原文件,目标文件

示例代码 

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char **argv)
{
        if(argc!=3)
        {
                printf("pararm error!\r\n");
                exit(-1);
        }
        int fdSrc=open(argv[1],O_RDWR);
        char *buffer=NULL;
        int size = lseek(fdSrc,0,SEEK_END);
        buffer=(char *) malloc(sizeof(char)*size +8);
        lseek(fdSrc,0,SEEK_SET);
        read(fdSrc,buffer,size);
        int  fdDes=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0760);
        write(fdDes,buffer,strlen(buffer));
        close(fdSrc);
        close(fdDes);
        return 0;
}

 运行效果

 

 2.修改配置文件

实现思路:

                1.open文件

                2.读出所有内容放入缓冲区

                3.在缓冲区找到要修改的内容

                4.重新将修改过的缓冲区内容写入文件

                5.关闭文件

示例代码 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char **argv)
{
        if(argc!=2)
        {
                printf("pararm error!\r\n");
                exit(-1);
        }
        int fdSrc=open(argv[1],O_RDWR);
        char *buffer=NULL;
        int size = lseek(fdSrc,0,SEEK_END);
        buffer=(char *) malloc(sizeof(char)*size +8);
        lseek(fdSrc,0,SEEK_SET);
        read(fdSrc,buffer,size);
        char *p = strstr(buffer,"LENG=");
        if(p==NULL)
        {
           printf("not found!\r\n");
           exit(-1);
        }
        p=p+strlen("LENG=");
        *p='7';
        lseek(fdSrc,0,SEEK_SET);
        write(fdSrc,buffer,strlen(buffer));
        close(fdSrc);
        return 0;
}

原配置文件

 修改后

 3.向文件中写入结构体数组,并打印结构体数组内容

实现思路:

                1.打开文件

                2.将结构体数组1的所有内容写入文件

                3.读出文件内容,放入结构体数组2

                4.关闭文件

示例代码 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
struct Student{
        char name[15];
        int age;
};
int main(int argc,char **argv)
{
        struct Student stus1[2]={{"xiaoming",18},{"xiaohong",17}};
        struct Student stus2[2];
        int fdSrc=open("./file1",O_RDWR|O_CREAT,0760);
        write(fdSrc,&stus1,sizeof(struct Student)*2);
        lseek(fdSrc,0,SEEK_SET);
        read(fdSrc,&stus2,sizeof(struct Student)*2);
        int i;
        for(i=0;i<2;i++)
        {
           printf("meg:%s,%d\r\n",stus2[i].name,stus2[i].age);
        }
        close(fdSrc);
        return 0;
}

 执行效果

注意:查看file1的内容时会出现乱码,因为文件是以字符方式记录内容,而插入的内容不全是字符 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值