首页 > 系统相关 >【linux上机实验】实验八 Linux编程实验

【linux上机实验】实验八 Linux编程实验

时间:2023-12-05 11:34:09浏览次数:51  
标签:target read Linux source fd file linux close 实验

1.使用系统调用对文件进行操作。

编写一个程序,把一个文件的内容复制到另一个文件上,即实现简单的copy功能。要求:只用open(),read(),write(),close()系统调用,程序要求带参数运行,第一个参数是源文件,第二个参数是目标文件。

步骤一:创建file_copy.c文件

vi file_copy.c

步骤二:将下列代码复制进步骤一创建的文件中并保存

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

#define BUF_SIZE 1024

int main(int argc, char *argv[]) {
	if (argc != 3) {
		fprintf(stderr, "Usage: %s source_file target_file\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	int source_fd, target_fd;
	ssize_t bytes_read, bytes_written;
	char buffer[BUF_SIZE];

	source_fd = open(argv[1], O_RDONLY);
	if (source_fd == -1) {
		perror("open");
		exit(EXIT_FAILURE);
	}

	target_fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
	if (target_fd == -1) {
		perror("open");
		close(source_fd);
		exit(EXIT_FAILURE);
	}

	while ((bytes_read = read(source_fd, buffer, BUF_SIZE)) > 0) {
		bytes_written = write(target_fd, buffer, bytes_read);
		if (bytes_written != bytes_read) {
			perror("write");
			close(source_fd);
			close(target_fd);
			exit(EXIT_FAILURE);
		}
	}

	if (bytes_read == -1) {
		perror("read");
		close(source_fd);
		close(target_fd);
		exit(EXIT_FAILURE);
	}

	if (close(source_fd) == -1) {
		perror("close");
		exit(EXIT_FAILURE);
	}

	if (close(target_fd) == -1) {
		perror("close");
		exit(EXIT_FAILURE);
	}

	return 0;
}

步骤三:使用以下命令编译生成可执行文件:

gcc file_copy.c -o file_copy

步骤四:创建源文件

vi source_file

里面的内容自行写
image

步骤五:使用以下命令来运行程序进行文件内容的复制:

./file_copy source_file target_file   (这个名字target_file可以随便改,这是目标文件)

标签:target,read,Linux,source,fd,file,linux,close,实验
From: https://www.cnblogs.com/whwh/p/17876513.html

相关文章

  • linux基础命令--文件管理类
    1.cat命令简介:打印文件到屏幕上格式cat[-AbeEnstTuv][--help][--version]fileName参数说明:-n或--number:由1开始对所有输出的行数编号。-b或--number-nonblank:和-n相似,只不过对于空白行不编号。-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一......
  • Linux keepalive
    参考:https://zhuanlan.zhihu.com/p/5661663931、关闭防火墙 2、安装keepaliveyuminstall-ykeepalived3、配置监测nginx是否存活vim/etc/keepalived/keepalived.conf!ConfigurationFileforkeepalivedglobal_defs{router_idLVS_DEVEL}vrrp_scriptngin......
  • 抽奖系统的部署(实验可行)
    以Windows10为例1.node安装最新版Node下载Node.js,一直下一步->安装完毕验证2.程序压缩包下载&解压lotterycdlottery#服务端插件安装cdservernpminstall#前端插件安装cd../productnpminstall#打包-这一步的时候出现了报错#Error:error:0308010C:digita......
  • linux的简单使用
    了解Linux的简单使用Linux的安装下载LinuxUbuntu版本和虚拟机VMware软件。我已经提前下载好了,下载好的文件分享出来bd这个是文件夹内的VMWare软件的注册码,安装完成的时候记得填上就能永久使用了MC60H-DWHD5-H80U9-6V85M-8280D打开这个软件,点击创建新虚拟机简单的步骤就......
  • 笔记本安装linux
    下载桌面版Ubuntu镜像服务器版Ubuntu镜像使用BalenaEtcher制作系统安装盘(1)官方网站下载:点我下载(2)下载完毕软件之后,打开软件,选择我们下载好的系统镜像,以及要制作成安装盘的U盘,点击“制作”按钮,稍等片刻,安装盘就制作完成啦。(3)进行操作系统安装(4)将引导盘插到要安......
  • 2023.12.4学习笔记(stm32跑马灯实验——库函数)
     STM32f4有七组引脚(GPIOx),每组引脚有16个IO口,每组由十个寄存器控制。   查找STM32引脚的功能,可以在STM32F04ZGT6文件50页左右查询,此文件所在的位置为硬件资料、芯片资料文件夹里。跑马灯实验思路步骤:1:使能时钟,调用函数RCC_AHB1PeriphClockCmd();       ......
  • Linux FastDFS 更换服务器数据迁移的方法
    FastDFS是一个开源的高性能分布式文件系统,特别适合于大规模数据和访问量场景。使用FastDFS进行文件存储时,某些情况下,我们可能需要更换服务器,但服务器已经使用一段时间,这时需要将原服务上存储的文件数据进行迁移。本文主要介绍FastDFS中存储的文件进行数据迁移的方法。FastDFS......
  • linux文件夹
    摘抄:https://zhuanlan.zhihu.com/p/78805412linux下各文件夹的结构说明及用途介绍:/bin:二进制可执行命令。/dev:设备特殊文件。/etc:系统管理和配置文件。/etc/rc.d:启动的配置文件和脚本。/home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示。/lib:标准......
  • Linux发布ASPNetCore 项目 IIS 部署
    Linux系统发布ASP.ENTCore项目Linux系统-CentOS7---基于虚拟机来安装IP:192.168.1.97安装教程链接:https://pan.baidu.com/s/1gI93YwptrWdPKHBh5fLNqQ?pwd=6666提取码:6666我们的ASP.ENTCore应用程序是需要跑在.NETCore环境上面的。所以我们就需要先安装.NETCore......
  • Linux下编译安装python
    1安装依赖yuminstallgccpatchlibffi-develpython-develzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel-y2下载源码到linuxyuminstall-ywgetwgethttps://www.python.o......