linux 管道交互,Linux C:具有独立读写命名管道的“交互式会话”?

我正在尝试使用“使用命名管道的进程间通信简介 - 使用命名管道的全双工通信”,link;特别是fd_server.c(包括如下供参考)Linux C:具有独立读写命名管道的“交互式会话”?

这是我的信息,并编译行:

:~$ cat /etc/issue

Ubuntu 10.04 LTS \n \l

:~$ gcc --version

gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

:~$ gcc fd_server.c -o fd_server

fd_server.c创建两个命名管道,一个用于读取,一个用于写入。什么人可以做的,就是:在一个终端,运行在服务器和读取(通过cat)其写入管道:

:~$ ./fd_server & 2>/dev/null

[1] 11354

:~$ cat /tmp/np2

,并在另一个,写(使用echo)到服务器的读取管道:

:~$ echo "heeellloooo" > /tmp/np1

回到第一终端,人们可以看到:

:~$ cat /tmp/np2

HEEELLLOOOO

0[1]+ Exit 13 ./fd_server 2> /dev/null

我想什么做的,是让不大不小的“互动”(或“壳”类似的)会议;也就是说,服务器像往常一样运行,但不是运行cat和echo,我想使用类似的屏幕。我的意思是,屏幕可以称为screen /dev/ttyS0 38400,然后它进行一种交互式会话,在终端中键入的内容将传递到/dev/ttyS0,并将其响应写入终端。现在,当然,我不能使用screen,因为在我的情况下,程序有两个单独的节点,并且据我所知,screen只能指一个。

如何在这种情况下实现这种“交互式”会话(使用两个独立的读/写管道)?下面

代码:

#include

#include

#include

#include

#include

#include

//#include /* For name of the named-pipe */

#define NP1 "/tmp/np1"

#define NP2 "/tmp/np2"

#define MAX_BUF_SIZE 255

#include //exit

#include //strlen

int main(int argc, char *argv[])

{

int rdfd, wrfd, ret_val, count, numread;

char buf[MAX_BUF_SIZE];

/* Create the first named - pipe */

ret_val = mkfifo(NP1, 0666);

if ((ret_val == -1) && (errno != EEXIST)) {

perror("Error creating the named pipe");

exit (1);

}

ret_val = mkfifo(NP2, 0666);

if ((ret_val == -1) && (errno != EEXIST)) {

perror("Error creating the named pipe");

exit (1);

}

/* Open the first named pipe for reading */

rdfd = open(NP1, O_RDONLY);

/* Open the second named pipe for writing */

wrfd = open(NP2, O_WRONLY);

/* Read from the first pipe */

numread = read(rdfd, buf, MAX_BUF_SIZE);

buf[numread] = '0';

fprintf(stderr, "Full Duplex Server : Read From the pipe : %sn", buf);

/* Convert to the string to upper case */

count = 0;

while (count < numread) {

buf[count] = toupper(buf[count]);

count++;

}

/*

* Write the converted string back to the second

* pipe

*/

write(wrfd, buf, strlen(buf));

}

编辑:

权,只是为了澄清 - 看来我发现了一个document讨论非常类似的东西,它是 - 脚本的修改有(” 对于例如,下面的脚本配置设备并启动一个后台进程,将从串行设备接收到的所有数据复制到标准输出...“)为以下程序:

# stty raw #

(./fd_server 2>/dev/null;)&

bgPidS=$!

(cat < /tmp/np2 ;)&

bgPid=$!

# Read commands from user, send them to device

echo $(kill -0 $bgPidS 2>/dev/null ; echo $?)

while [ "$(kill -0 $bgPidS 2>/dev/null ; echo $?)" -eq "0" ] && read cmd; do

# redirect debug msgs to stderr, as here we're redirected to /tmp/np1

echo "$? - $bgPidS - $bgPid" >&2

echo "$cmd"

echo -e "\nproc: $(kill -0 $bgPidS 2>/dev/null ; echo $?)" >&2

done >/tmp/np1

echo OUT

# Terminate background read process - if they still exist

if [ "$(kill -0 $bgPid 2>/dev/null ; echo $?)" -eq "0" ] ;

then

kill $bgPid

fi

if [ "$(kill -0 $bgPidS 2>/dev/null ; echo $?)" -eq "0" ] ;

then

kill $bgPidS

fi

# stty cooked

所以,保存脚本说starter.sh和调用它,与下一届会议的结果:

$ ./starter.sh

0

i'm typing here and pressing [enter] at end

0 - 13496 - 13497

I'M TYPING HERE AND PRESSING [ENTER] AT END

0~�.N=�(�~� �����}����@������~� [garble]

proc: 0

OUT

这是我会叫“交互会话”(忽略调试语句) - 服务器等待我输入命令;它在接收到一个命令后给出它的输出(在这种情况下,它在第一个命令之后退出,起始脚本也一样)。除此之外,我想没有缓冲输入,但逐字发送(这意味着上面的会话应该在第一次按键后退出,并且只打印出单个字母 - 这是我期望raw有帮助,但它不是:它只是杀死反应既输入和按Ctrl - ç :))

我只是游荡,如果已经有一个现有的命令(对于串行设备类似于screen,我猜)会接受两个这样的命名管道作为参数,并通过它们建立像会话那样的“终端”或“shell”;或者我将不得不使用上面的脚本和/或编程自己的“客户端”,它将起到终端的作用。

2010-05-06

sdaau

+0

使用Ctrl + K将代码缩进四个空格,这将创建一个语法高亮的代码块。我为你做了,停止编辑。 ;-) –

2010-05-06 13:12:45

+0

谢谢,约翰Kugelman,建议和编辑:) –

2010-05-06 13:18:13

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux sz到指定的机器,linux 机器之间 zssh, rz, sz互相传输讲解

zssh的全名叫ZMODEM SSH.看名字就知道&#xff0c;使用的zmodem&#xff0c;我们习惯了SecureCRT,直接就可以用来发送文件&#xff0c;比使用scp方便很多。zmodem协议方便主要表示在以下点其一,不需要输入很长的命令和密码&#xff0c;直接使用rz,sz加文件名&#xff0c;就能实…

ghost linux 全盘拷贝,如何用ghost实现小硬盘对大硬盘的全盘拷贝?

先安装Ghost然后启动机器到纯DOS模式下&#xff0c;并且不加载任何应用程序&#xff0c;执行Ghost.exe文件&#xff0c;在显示出Ghost主画面后&#xff0c;选择Local→Partition→To Image"&#xff0c;屏幕显示出硬盘选择画面和分区选择画面&#xff0c;请根据需要选择所…

内网中入侵linux系统,MSSQL 入侵提权之内网渗透案例分析

图文&#xff1a;udb311主题&#xff1a;MSSQL内网渗透案例分析发表&#xff1a;黑白前线描述&#xff1a;对于内网渗透技术一直感觉很神秘&#xff0c;手中正巧有一个webshell是内网服务器。借此机会练习下内网入侵渗透技术&#xff01;本文敏感信息以屏蔽&#xff01;密码都以…

【Linux】僵尸与孤儿 进程等待

目录 一&#xff0c;僵尸进程 1&#xff0c;僵尸进程 2&#xff0c;僵尸进程的危害 二&#xff0c;孤儿进程 1&#xff0c;孤儿进程 三&#xff0c;进程等待 1&#xff0c;进程等待的必要性 2&#xff0c;wait 方法 3&#xff0c;waitpid 方法 4&#xff0c;回收小结…

linux bool变量,Objective-C中的占位符,打印BOOL类型数据

常用的一些占位符&#xff1a;%&#xff1a;字符串占位符%d:整型%ld:长整型%f:浮点型%c:char类型%%&#xff1a;%的占位符尽管有那么多的占位符&#xff0c;但是好像没有发现BOOL型的数据的占位符&#xff0c;这也是比较纠结的地方&#xff0c;看了一下别人是怎么解决这个问题的…

函数在c语言中的地位和作用,C语言重要考点分析

C语言重要考点分析有人说&#xff1a;好好学习&#xff0c;天天向上&#xff0c;的确&#xff0c;我们是应该这么做&#xff0c;作为一个中小学生的感受来理解学习&#xff0c;我们大概都认为学习不好玩&#xff0c;读书的都是书呆子&#xff0c;但是等到知道学习能干什么时&am…

c语言简单选择对字符串数组排序,简单了解C语言中直接插入排序与直接选择排序实现...

直接插入排序基本思路&#xff1a;1. 从a[0]开始&#xff0c;也就是从1个元素开始是有序的&#xff0c;a[1]~a[n-1]是无序的。2. 从a[1]开始并入前面有序的数组&#xff0c;直到n-1。#include #define N 5void insertsort(int a[], int n);void swap(int *x, int *y);void inse…

c语言逆波兰计算器程序,C语言实现的简单的逆波兰计算器

前后调试了好几天&#xff0c;类型转换问题颇为麻烦&#xff0c;无赖使用两种不同类型的栈解决&#xff0c;但程序目前还有两个问题&#xff1a;1.目前不能进行float类型的计算&#xff1b;2.不能进行多位数的运算。实际上就是目前只能进行个位数的带括号的加减乘除运算&#x…

c语言竞赛成绩排序,吧内编程竞赛:成绩公布

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼第二第三题太狡猾了第二题居然有重复的路……怪不得只通过30%……第三题居然可以只吃一部分(一直以为要吃完&#xff0c;题目看上去也是这样)第一题因为输入的数极差不大&#xff0c;可以用数组(大小为 (极差1))存放#includeint a[…

avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机控制8段LED数码管同时显示 - AVR单片机8位数码管显示的程序实现(两种方法介绍)...

AVR单片机控制8段LED数码管同时显示这是一个简单的供单片机入门学习者练习用的8段LED数码管控制汇编程序&#xff0c;控制一个两位的数码管同时显示字符(动态刷新)。用AVR- Studio-4 开发&#xff0c;在AVR单片机Atmega48上调试通过。学习者可以举一反三应用到其他类型的单片机…

C语言程序设计与有限元,C语言与有限元程序设计.pdf

C语言与有限元程序设计.pdfC语言与有限元程序设计叶 又 戚 燕(上海交通大攀国家棋其C几D工程中心 上海加0030) (上海大学计算中心 上海匆印力摘 要 本文通过与FORTRAN77语官的比较&#xff0c;说明利用C语言开发有限元程序的可行性。结果表明,C语官不但完全可以实现FORTRAN77的…

c语言gets n,c语言中gets ,getschar 和fgets 的用法及三者之间的差别

满意答案wkmpbg846推荐于 2018.02.27采纳率&#xff1a;45% 等级&#xff1a;8已帮助&#xff1a;362人gets():原型:char *gets(char *buffer) ;功能:从stdlin中获取获取字符串一直到换行符或者遇到EOF为止&#xff0c;但换行符不被录取&#xff0c;会将换行符替换成‘\0’来…

南工院linux考试题库,操作系统复习题..doc

操作系统复习题.第一章 操作系统概述学习指导:本章主要介绍操作系统的基本概念、特性和分类&#xff0c;从操作系统的地位和作用两个方面给出了操作系统的描述性定义。读者应当注意操作系统程序的特殊性&#xff0c;以及操作系统与硬件和其它软件之间的关系&#xff0c;理解操作…

android电话系统,Android电话系统之-rild.doc

Android电话系统之-rild.docAndroid电话系统之-rildRild是Init进程启动的一个本地服务&#xff0c;这个本地服务并没有使用Binder之类的通讯手段&#xff0c;而是采用了socket通讯这种方式。RIL(Radio Interface Layer)Android 给出了一个ril实现框架。由于Android开发者使用的…

android出现错误,在做一个安卓的一个登陆操作的时候,出现错误

源代码如下&#xff1a;/**//*author Administrator**/package com.example.login;//import org.testng.annotations.Test;//import org.testng.annotations.BeforeClass;//import org.testng.annotations.AfterClass;import io.appium.java_client.AppiumDriver;import io.app…

android中svn插件安装,AndroidSDK安装SVN插件问题解决

工具版本信息:Eclipse4.2ADT23.0Subclipse1.10,插件安装地址:http://subclipse.tigris.org/update_1.10.x问题一报错信息如下:Cannot complete the install because one or more required items could not be found.Software being installed: Subversion Revision Graph 1.1.1…

android 点击空白退出,Android 点击空白处隐藏键盘

方法一&#xff1a;使用android的分发机制(代码稍微有点多)/*** 实现点击空白处&#xff0c;软键盘消失事件* param ev* return*/Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() MotionEvent.ACTION_DOWN) {// 获得当前得到焦点的View&#…

鸿蒙系统的变化,鸿蒙系统没变化的背后

原标题&#xff1a;鸿蒙系统没变化的背后鸿蒙系统发布以后被很多人吐槽&#xff0c;说是没什么变化&#xff0c;和之前体验的安卓系统简直一模一样&#xff0c;真的失望至极。其实&#xff0c;鸿蒙系统还是从底层做出了改变&#xff0c;只不过没有变了界面和运行方式而已。那么…

三星s2 硬刷Android 8,三星T710(GALAXY Tab S2 8.0)一键救砖教程,轻松刷回官方系统...

三星T710(GALAXY Tab S2 8.0)手机变砖了怎么办?对于经常刷机的安卓玩家来说&#xff0c;碰到刷机失败导致三星T710(GALAXY Tab S2 8.0)手机无法启动甚至无法进入recovery都是在所难免的事&#xff0c;这个时候我们就需要用到奇兔线刷大师线刷救砖功能了&#xff0c;它能轻松实…

鸿蒙工业互联网,工业互联网 3D 展示平台

原标题&#xff1a;工业互联网 3D 展示平台项目简介产业园区占地约为 158.46 亩&#xff0c;现有生产车间两栋、研发楼一栋、检测楼一栋、食堂及倒班楼一栋、废品库一栋、门卫室两处、综合站房一处。主要从事电缆、电线的生产与加工。产业园区综合管理平台项目开发内容复杂&…