zoukankan      html  css  js  c++  java
  • apue 20130328

    内部命令:cd exit (bash)  中的一个功能

    外部命令:ls date  (有对应的二进制文件)

    单独的二进制文件

    Cd  /tmp  exit  fork()

    Ls -l >a.c   exec()

     

     

    外  if (cmd  >){

    Cmd[]=NULL;  结束标志

    Open(a.c);

    Dup2(fd,1);

    }

     

    内   if (cd bash)  {

    内部

    Cd  chdir();

    Exit;return;

    Continue;

    }

     

    Ls -l  | grep  A   过滤

    管道:前面命令的输出作为后面命令的输入  完善内部命令   ls *.a  通配符

    通配符的支持  :  ls *.c   任意一个 ls  ?.c  一个

     

    Ls [a-z].c  a.c b.c c.c d.c 

     

    Apue  几部分

    1,文件操作   所有文件

    2,多进程进程间通讯    1, 传输数据 传整型,传字符串  2  传输非数据     并发情况

    信号传不了数据

    进程之间是相对独立的   进程4G空间

    把数据放在第三方    把数据放在内核里          通过OS

    因为内核可以看到每个进程的     函数是共用的  

     

    1,管道   半双工   ->   <-    单向的      双工 <->   双向的

    Pipe();系统调用  

          内核中创造管道,返回给主调函数.管道两端

    Mkfifo();管道文件

    Xsi_ipc   ansi;  popen() pclose

     

    消息队列

      Xsi_ipc;消息分类,灵活

    3共享内存,与信号量使用   两个while

      Mmap()  fd   +  /dev/zero

      父子进程,open进程间关系

    4,socket  套接字(协议)  TCP/IP

    Lo  :网卡   本地回环测试   最慢的

     

    效率:管道   mkfifo简单    足够老

     

    非数据 :1信号 告知  通知

    1,信号  :kill(pid)    怎么知道对方的pid

          父子进程之间:父进程返回值  子进程pid

    2,信号量 pv操作    -1  +1

    Xsi_ipc

     

    Pipe()固定的两端读写

    Pipe()

    Fork();     父子进程都知道管道两端

     

    If(pid==0){

    }

    If(pid>0){

    }

     

    pipefork

     

    Fork   pipe   没有关系

     

    Pipe:唯一方话号中带数字的

     

    两个数据一样      pipe

    不一样            结构体

     

    Fd[0]   读    fd[1]  写       类型是否相同

    Int fds[2];

    Ret = pipe(fds);    

    Fds[0]   read

    Fds[1]   write

     

    Int fds[4];

    Pipe(fds);  fds[0]=read  fds[1]=write

    Pipe(fds+2)   fds[2]  read  fds[3]  write

     

    Char buf[100]="0";

    Pid=fork();    子进程继承父进程

    If (pid==0){  //write

    Close(fds[0]);   write(fds[1],"hello world",11);

    }

     

    If (pid>0){  //read

    Close(fds[1]);   read(fds[0],buf,sizeof(buf));  

    Printf ("from c : %s",buf);

    }

     

    练习:  ls -l   /lib  |  grep  libc   

                   写   获取

    进程1   execlp("ls","ls","-l","/lib",NULL);

    进程2   execlp("grep","grep","libc",NULL);

     

    进程1   向管道写

    进程2   从管道读   终端1

    使用dup2   >   实现重定向

     

     

    Pipe();

    Fork();

    父子    每个execlp

    Int fds[2],pipe=pipe(fds);  

     

    Dup2(fds[1],1);     两个文件指向同一个文件

    Dup2(fds[0],0);      

     

    输入  ->  输出 ->  输入—>  输出

    0         fds[1]    fds[0]     1

     

    Ssh();远程登录    socket套接字

    Ssh_client        ssh_server   

    0,1,2    dup2

    Mkfifo:手工创造管道文件       任意进程     本机

     

    Mkfifo   pp    0        不占用磁盘空间      内核中占用

     

    Vi  多个文件   -O

     

    Fd=open("pp",O_RDONLY);

    Ret=read(fd,buf,sizeof(buf));

    Printf ("from fifo:%s\n",buf);

     

    Fd=open("pp",O_WRONLY);

    Write(fd,"hello world");

    先运行    读    再运行     写

     

    练习:进程1,每个1秒产生一个随机数.

    进程2,输出奇数

    进程3,输出偶数

    进程4,输出质数(素数)

     

    输出,升序输出

    某一个输出时的个数达到20.,所有进程结束

     

    分析

    1,一个管道能否实现单向

      管道:单向  ,如果一个写端,多个读端

    写端不能指定把数据发给谁

     

     

    进程1   产生随机数    3,4,个管道

    2,3,4while(1)

    Close(fd),写端再写,给自己发,自己结束当前进程。

    读进程返回值为0.

    判断read返回值,下次再写时才执行    管道处理不了

    2,如何结束,判断read的返回值   如果写端结束,read  返回值  == 0

    3约定数据大小,   4,   4

    Write(fd,&num,sizeof(4));   write(fd,&num,sizeof(4));    地址

    Read(fd,buf,sizeof(4));     网络编程

    Read(fd,)文件写管道不一样

    字符串结构体   

    1,方式,2,传什么,3,怎么结束

     

    1

    Fd1=open();

    Fd2=open();

    Fd3=open();

    While(1){

    Rand%100;

    If()

    Write();

    Else if 

    Write();

    Else if()

    Write();

    }

     

    2

    Open(argv[2])

    While(1){

    Ret=read();

    If (ret==0)

    Break;

    Mysort();

    Qsort();

    Show();

    }

     

     

     

     

     

  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小 N
    CF1474F 1 2 3 4 ...
    CF1466H Finding satisfactory solutions
    CF1336F Journey
    [PKUSC2021]代金券
    如何科学地设计对拍随机种子
    CF1168E Xor Permutations
    「JOISC 2019 Day2」两种运输
    springboot json参数
    springboot整合webserver应用
  • 原文地址:https://www.cnblogs.com/wangjingyuwhy/p/2987744.html
Copyright © 2011-2022 走看看