OSLab课堂作业1
日期:2019/3/16
作业:实现命令cat, cp, echo。
myecho命令
|
#include <stdio.h> int main(int argc, char *argv[]) { int i = 0; printf("argument count = %d\n", argc); for (; i < argc; i++) printf("%s\n", argv[i]); return }
|
mycat命令
|
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <fcntl.h> static int main(int argc, char *argv[]) { printf("Running program is %s\n", argv[0]); printf("Argument count is %d\n", argc); printf("File name is %s\n", argv[1]); int file_desc = open(argv[1], O_RDONLY); if (file_desc == -1) { perror("file is not existed!"); exit(EXIT_FAILURE); } int flag = read(file_desc, buf, 255); while (flag != 0 && flag != -1) { printf("%s", buf); memset(buf, 0, sizeof(buf)); flag = read(file_desc, buf, 255); } return }
|
mycp命令
不支持dst为目录的cp命令。
|
#include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> static int main(int argc, char *argv[]) { printf("src is %s\n", argv[1]); printf("dst is %s\n", argv[2]); int src = open(argv[1], O_RDONLY); if (src == -1) { perror("file doesn't exist!\n"); exit(EXIT_FAILURE); } int dst = open(argv[2], O_RDWR | O_CREAT); int flag = read(src, buf, 255); while (flag != 0 && flag != -1) { write(dst, buf, 255); memset(buf, 0, sizeof(buf)); flag = read(src, buf, 255); } return }
|
mycp2命令
支持dst为目录。
|
#include <sys/types.h> #include <dirent.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> static void cp_to_file(int src, int dst) { int flag = read(src, buf, 255); while (flag != 0 && flag != -1) { write(dst, buf, flag); memset(buf, 0, sizeof(buf)); flag = read(src, buf, 255); } close(src); close(dst); } int main(int argc, char *argv[]) { printf("src is %s\n", argv[1]); printf("dst is %s\n", argv[2]); int src = open(argv[1], O_RDONLY); if (src == -1) { perror("file doesn't exist!\n"); exit(EXIT_FAILURE); } int dst; DIR *pdir = opendir(argv[2]); if (pdir == NULL) { //dst is file dst = open(argv[2], O_RDWR | O_CREAT); cp_to_file(src, dst); } else { //dst is dir printf("%s is a dir\n", argv[2]); char temp[256]; strcpy(temp, argv[2]); if (temp[strlen(temp) - 1] != '/') strcat(temp, "/"); strcat(temp, argv[1]); puts(temp); dst = open(temp, O_RDWR | O_CREAT); cp_to_file(src, dst); } return }
|
OSLab课堂作业1的更多相关文章
- OSLab课堂作业2
日期:2019/3/23 内容: 实现内容 要求 mysys.c 实现函数mysys,用于执行一个系统命令. mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍 使 ...
- 栋哥你好,让我们回顾最初认识C++的时候(课堂作业)
计算器的第一步,至今还记记忆犹新,本次的课堂作业,便是那个框架.闲话少叙,代码如下传送门: Main.cpp #include "stdafx.h" #include<ios ...
- 20155213 第十二周课堂作业MySort
20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...
- 课堂作业-Bag类的实现
课堂作业-Bag类的实现 要求: 代码运行在命令行中,路径要体现学号信息,IDEA中,伪代码要体现个人学号信息 参见Bag的UML图,用Java继承BagInterface实现泛型类Bag,并对方法进 ...
- Java课程课堂作业代码
前言 本文章只是单纯记录课堂老师布置的课堂作业代码,题目都比较简单,所以没有写解题思路,相信大家都能理解,当然其中有的解法和代码不是最优的,当时只是为了完成题目,后来也懒得改了,如果有不恰当或者不正确 ...
- Java课堂作业详解
今天的Java课堂留下了一个作业:使用Eclipse编写一个程序,使输入的两个数进行加和,并且输出他们的和.对于这个题目,我们首先可以把它分解成为三个不同的小步骤 第一步就是输入这两个数,因为我们无需 ...
- 百度前端学院js课堂作业合集+分析(更新中...)
第一课:简陋的登录框 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 面向对象程序设计_课堂作业_01_Circle
The 1st classwork of the C++ program 题目: Create a program that asks for the radius of a circle and p ...
- C++ 课堂作业1.0
c++第一次课堂作业点这里 题目要求:输入半径,计算圆的面积,在调用外部函数,无需使用类.
随机推荐
- mysql优化概述3
1.前缀索引 建立索引关键字一种方案. 通常会使用字段的整体作为索引关键字. 有时,使用字段前部分数据,也可以去识别某些记录. 语法: index `索引名` (`字段`(N)); 使用字段前N个字符 ...
- Spring框架的事务管理之基于AspectJ的注解方式(重点掌握,最简单的方式)
1. 步骤一:恢复转账的开发环境(具体开发环境实现见:https://www.cnblogs.com/wyhluckdog/p/10137283.html)2. 步骤二:applicationCont ...
- mysql自定义函数收集
代码: 查找字符串 in_string 中,存在多少个字符串 in_find_str delimiter $$ DROP FUNCTION IF EXISTS `fn_findCharCount` $ ...
- 将html转换成image图片png格式
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics ...
- VMware下的Linux系统中Windows的共享目录,不支持创建软连接
[问题] 在编译VMware下的Linux系统对从Windows中共享过来的文件,进行编译的时候,遇到: ln: creating symbolic link XXXXXX : Operation ...
- [Eclipse]Eclipse里对XML进行注释的快捷键
eclipse中编辑java或C/C++文件时,注释的快捷键均为 "CTRL + / ",编辑xml文件时,该快捷键无效. eclipse 针对 XML 注释:CTRL + SHI ...
- servlet填充Response时,数据转换之content-type
在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值. 1. ...
- part1:6-Linux文本编辑器vi
vi编辑器简介: vi是Linux系统的第一个全屏幕交互式编辑器:vim则是vi的升级版得到广大用户青睐. vim有三种工作模式:命令行模式.插入模式.底行模式 命令行模式常用功能键: yy:复制当前 ...
- Find the squareroot
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...
- idea开发工具下报Set language level to 6-@Override in interfaces的解决方法
idea开发工具下报Set language level to 6-@Override in interfaces的解决方法 实现接口时报如下错误:Set language level to 6-@O ...