嵌入式学习之linux系统编程---11 综合练习二

练习二:在练习一的基础上,利用学到的目录IO的知识,修改练习一的代码,增加以下需求:

(1)打印我们需要拷贝的目录下的所有文件名,并拷贝我们需要的文件;
(2)通过键盘,输入我们要拷贝的文件的路径和文件名等信息

分析:
“打印需要拷贝的目录下的所有文件名”使用opendir以及closedir函数可以完成该操作;“拷贝我们需要的文件”这个属于练习一的内容。(练习一:将a.c的内容拷贝到b.c中
“通过键盘,输入我们要拷贝的文件的路径和文件名等信息”可以使用c语言中的scanf函数来实现。
c代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
int main(int argc,char *argv[]) {
	//步骤一:定义变量
	int fd_src,fd_obj;
	char buf[32] = { 0 };
	char file_path[32] = { 0 };
	char file_name[32] = { 0 };
	ssize_t ret;
	struct dirent* dir;
	DIR* dp;
	// 步骤二:从键盘输入文件路径,要通过键盘键入,可以使用“scanf”函数
	printf("Please enter the file path:\n");
	scanf("%s", file_path);
	// 步骤三:打开目录,获得目录流指针,并读取目录
	dp = opendir(file_path);
	//用dp来接收opendir的返回值,该路径从哪里来呢?
	//进行判断,如果目录流指针等于null,则打开目录失败;否则打印成功打开目录
	if (dp == NULL)
	{
		printf("opendir is error\n");
		return -1;
	}
	printf("opendir is ok\n");
	while (1)
	{
		dir = readdir(dp);
		if (dir != NULL)
		{
			printf("file name is %s\n", dir->d_name);
		}
		else
			break;
	}
	// 步骤四:获得文件的名字
	printf("Please enter the file name:\n");
	scanf("%s", file_name);
	// 步骤五:获得文件描述符
	fd_src = open(strcat(strcat(file_path, "/"), file_name), O_RDWR);
	if (fd_src < 0)
	{
		printf("open is error\n");
		return -1;
	}
	fd_obj = open(file_name, O_CREAT | O_RDWR, 0666);
	if (fd_obj < 0)
	{
		printf("open is error\n");
		return -2;
	}
	// 步骤六:读写操作(使用循环,让它进行写操作)
	while ((ret = read(fd_src, buf, 32)) != 0)
	{
		write(fd_obj, buf, ret);
	}
	// 步骤七:关闭目录,文件
	close(fd_src);
	close(fd_obj);
	closedir(dp);
	return 0;
}

在ubuntu界面的编译结果如下:
先查看practice里面有哪些文件,然后开始编译practice2.c文件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值