首页 > 其他分享 >Lab util: Unix utilities

Lab util: Unix utilities

时间:2023-04-14 19:11:57浏览次数:37  
标签:char int utilities util read Unix sleep user buf

Boot xv6

启动 xv6:make qemu

打印进程信息:ctrl-p

退出:ctrl-a x

sleep

在 user 下创建编写 sleep.c,修改 Makefile

pingpong

在 user 下创建编写 pingpong.c,修改 Makefile

#include "kernel/types.h"
#include "user/user.h"

int main(int argc, char *argv[])
{
    char buf[1];

    int p[2];
    pipe(p);

    if (fork() == 0) {
        read(p[1], buf, 1);
        fprintf(1, "%d: received ping\n", getpid());
        write(p[0], "c", 1);
    } else {
        write(p[1], "p", 1);
        sleep(10);
        read(p[0], buf, 1);
        fprintf(1, "%d: received pong\n", getpid());
    }

    exit(0);
}

第 17 行的 sleep 不能删除,如果删除父进程会直接读取写入的字节从而导致子进程的 read 无限阻塞

为避免预测程序流,可以使用两对管道

#include "kernel/types.h"
#include "user/user.h"

int main(int argc, char *argv[])
{
    char buf[1];

    int p[2], p1[2];
    pipe(p);
    pipe(p1);

    if (fork() == 0) {
        read(p[0], buf, 1);
        fprintf(1, "%d: received ping\n", getpid());
        write(p1[0], "c", 1);
    } else {
        write(p[1], "p", 1);
        read(p1[0], buf, 1);
        fprintf(1, "%d: received pong\n", getpid());
    }

    exit(0);
}

primes

创建 pipe,在 fork 后,父子进程都有指向管道写入端和读入端的文件描述符,都要适时关闭

find

在 user 下创建编写 find.c,修改 Makefile

读目录读到的是结构体

// Directory is a file containing a sequence of dirent structures.
#define DIRSIZ 14

struct dirent {
  ushort inum;
  char name[DIRSIZ];
};

xargs

在 for 中 break 竟然会执行 i++

局部缓冲区不能开太大

# 令人疑惑的是,在 xv6 上
$ echo "1\n2"
$ "1\n2"
# 理想结果应该是
$ 1
$ 2

标签:char,int,utilities,util,read,Unix,sleep,user,buf
From: https://www.cnblogs.com/cong0221/p/17319351.html

相关文章

  • JSUtil
    ***拷贝地址栏中的url***functioncopyurl(){varIE=false,c=location.href;varj=navigator.userAgent,l=/MSIE([0-9]{1,}[\.0-9]{0,})/.exec(j);if(l&&(l=parseFloat(RegExp.$1))){IE=true}if(IE){clipboardData.setData('Text',c);......
  • 使用java.util.zip对生成的字节数组输出文件流 进行打包压缩(单个、批量),并返回压缩包
    废话不多说直接上代码 packagegov.test.util;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.util.List;importjava.util.Map;importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.Zip......
  • uva 11082 A Plug for UNIX
     #include<iostream>#include<vector>#include<map>#include<queue>#include<cstring>usingnamespacestd;constintN=1e4+2,M=5e5;intn1,n2,n3,len;map<string,int>mp;map<int,int>A,B;constintin......
  • ubuntu 20.04 基于docker快速搭建中文 的一些问题解决 Utilization of discoverer pro
    1.Utilizationofdiscovererprocessesover75%解决办法问题状态如下zabbixserver在开启Discovery功能后,zabbixweb页面报警提示:“Zabbixserver:Ulitizationofdiscovererprocessesover75%”。原因:每个discovery任务占用一个discovery进程,但是zabbixserver默认只配置了一......
  • SM4Utils加解密demo
    SM4Utils加解密demopackagecom.example.core.mydemo.sm4;importcn.org.bjca.utils.SM4Utils;publicclassSM4Test{publicstaticvoidmain(String[]args){Stringkey="77rTb25789srfbhulsjwnv==";Stringiv="BPEpTshuwas......
  • JAVA基础-StringUtils
    依赖<!--commons--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</version></dependency>举例importorg.apache.commons.lang......
  • java并发编程(2):Java多线程-java.util.concurrent高级工具
    高级多线程控制类Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent,提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。ThreadLocal类ThreadLocal类用来保存线程的独立变量。对一个线程类(继承自Thread)当使用ThreadLocal维护变......
  • unix并发技术的学习及在扫描器上的应用二
    unix并发技术的学习及在扫描器上的应用二上一篇并发技术说的是多进程,本来想在那的基础上加进进程间同步和通信,不过暂时还没有掌握到,只能换成多线程来做rp了.第一部分--基础知识一.线程概念: 线程是提高代码响应和性能的绝好的手段,其由内核按时间分片进行管理.进程可含多线程,线程间......
  • unix并发技术的学习及在扫描器上的应用一
    ***条件和时间问题,程序暂时还没进行测试.              unix并发技术的学习及在扫描器上的应用一我一直学着写扫描器.我的一个方向是:多进程--多线程--线程安全(MT-safe).都想在扫描器上实现.现在学习多进程部分.第一部分--基本知识 一.进程概念:进程定义了一计算的......
  • Lunix常用命令
    ll查看当前目录下的所有文件pwd查看当前位置cd进入某个文件夹wget是Linux系统用于从Web下载文件的命令行工具,支持HTTP、HTTPS及FTP协议下载文件tar压缩加压命令tarxvf解压某个压缩包su切换管理员whereis  which查找文件或文件夹rm删除文件命令./config--p......