使用文件IO对图片进行拷贝。要求子进程拷贝后半部分,父进程拷贝前半部分。要求拷贝到一个文件中。拷贝完毕后与源文件一致。

 

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
	int a=open("./1.jpg",O_RDONLY);
	if(a<0)
	{
		perror("open");
		return -1;
	}
	
	int b=open("./2.jpg",O_WRONLY | O_CREAT | O_TRUNC,0775);
	if(b<0)
	{
    	perror("open");
    	return -1;
	}
	
	off_t size = lseek(a, 0, SEEK_END);
	lseek(a, 0, SEEK_SET);
	pid_t pid=fork();
	if(pid > 0)
	{
		sleep(5);
		lseek(a, 0, SEEK_SET);
		lseek(b, 0, SEEK_SET);
		char buf;
		for(int i=0; i<size/2; i++)
		{
			read(a,&buf,1);
			write(b,&buf,1);
		}
	}

	else if(pid == 0)
	{
		lseek(a,size/2,SEEK_SET);
		lseek(b,size/2,SEEK_SET);
		char buf;
		for(int i=0; i<size/2+1; i++)
		{
			read(a,&buf,1);
			write(b,&buf,1);
		}
	}

	else
	{
		perror("fork");
		return -1;
	}
	close(a);
	close(b);
	return 0;
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux,可以使用系统调用进行文件拷贝操作。以下是一个使用系统I/O实现文件拷贝的示例代码: ```c #include <fcntl.h> #include <unistd.h> #define BUF_SIZE 4096 int main(int argc, char *argv[]) { int source_fd, dest_fd; ssize_t bytes_read, bytes_written; char buffer[BUF_SIZE]; // 检查命令行参数 if (argc != 3) { printf("Usage: %s <source_file> <destination_file>\n", argv[0]); return 1; } // 打开源文件 source_fd = open(argv[1], O_RDONLY); if (source_fd == -1) { perror("open"); return 1; } // 创建目标文件 dest_fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644); if (dest_fd == -1) { perror("open"); close(source_fd); return 1; } // 从源文件读取数据并写入目标文件 while ((bytes_read = read(source_fd, buffer, BUF_SIZE)) > 0) { bytes_written = write(dest_fd, buffer, bytes_read); if (bytes_written != bytes_read) { perror("write"); close(source_fd); close(dest_fd); return 1; } } // 关闭文件描述符 close(source_fd); close(dest_fd); return 0; } ``` 你可以将上述代码保存为一个.c文件(例如copy.c),然后通过以下命令编译并运行: ``` gcc copy.c -o copy ./copy <source_file> <destination_file> ``` 其,`<source_file>`是源文件的路径,`<destination_file>`是目标文件的路径。注意替换这两个占位符为你实际的文件路径。 这段代码使用了`open`、`read`和`write`等系统调用来进行文件的打开、读取和写入操作,通过循环逐块拷贝数据,直到源文件读取完毕。请确保在运行代码时有足够的权限来读取和写入文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值