erl_port_ex.c
来自「OTP是开放电信平台的简称」· C语言 代码 · 共 84 行
C
84 行
/* ``The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved via the world wide web at http://www.erlang.org/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Initial Developer of the Original Code is Ericsson Utvecklings AB. * Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings * AB. All Rights Reserved.'' * * $Id$ */#include "ose.h"#include "errno.h"#include "dbgprintf.h"#include "stdlib.h"#include "stdio.h"#include "string.h"#include "erl_port_signals.sig"#include "ose_erl_port_prog.h"union SIGNAL { SIGSELECT sigNo; struct PortData portData; }; ERL_PORT_PROG(erl_port_prog_ex1) { static const SIGSELECT recv[] = {2, OS_ATTACH_SIG, PORT_DATA}; union SIGNAL *sig; PROCESS erts_; if(!hunt("erts", 0, &erts_, NULL)) { fprintf(stderr, "PORT PROCESS: Fail to read ERTS pid, closing!\n"); kill_proc(current_process()); } attach(NULL, erts_); while(1) { sig = receive((SIGSELECT*)recv); switch(sig->sigNo) { case OS_ATTACH_SIG: free_buf(&sig); fprintf(stderr, "PORT PROCESS: ERTS process terminated, closing!\n"); ERL_PORT_PROG_UNREG(erl_port_prog_ex1); kill_proc(current_process()); break; case PORT_DATA: if(strcmp(sig->portData.buf, "stop") == 0) { printf("PORT PROCESS: stopped by user!\n"); ERL_PORT_PROG_UNREG(erl_port_prog_ex1); kill_proc(current_process()); } else { /* echo the message */ send(&sig, erts_); } } }}/* ------------- LM INIT PROCESSES ------------ *//* register port program from static process */OS_PROCESS(erl_port_prog_ex1_reg) { ERL_PORT_PROG_DECL(erl_port_prog_ex1); ERL_PORT_PROG_REG(erl_port_prog_ex1); stop(current_process());}/* good for nothing LM init process */OS_PROCESS(erl_port_prog_ex1_main) { stop(current_process());}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?