社区
进程/线程/DLL
帖子详情
控制台程序的问题
cuilonggang
2008-09-06 11:55:59
我想用WriteConsoleInput这类的低级别api来操纵控制台,编写shell服务器,目前实现了一个客户端,如有多个客户端连接,服务进程创建的每个子cmd进程访问标准输入会有冲突,请问如何创建另外的输入缓冲区供子进程使用,并且还能使用WriteConsoleInput这类api?已经知道CreatePipe创建的管道不可以,它只能用WriteFile写入字符内容。
...全文
138
5
打赏
收藏
控制台程序的问题
我想用WriteConsoleInput这类的低级别api来操纵控制台,编写shell服务器,目前实现了一个客户端,如有多个客户端连接,服务进程创建的每个子cmd进程访问标准输入会有冲突,请问如何创建另外的输入缓冲区供子进程使用,并且还能使用WriteConsoleInput这类api?已经知道CreatePipe创建的管道不可以,它只能用WriteFile写入字符内容。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenyijiu
2008-09-10
打赏
举报
回复
MSDN里面有一些文档可以看看,方法是利用CreateProcess的 LPSTARTUPINFO 参数,
设置dwFlags为STARTF_USESTDHANDLES:
然后自定义:
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
三个流句柄。
这些句柄可以用CreatePipe创建的匿名管道句柄代替:
BOOL CreatePipe(
PHANDLE hReadPipe, // read handle
PHANDLE hWritePipe, // write handle
LPSECURITY_ATTRIBUTES lpPipeAttributes, // security attributes
DWORD nSize // pipe size
);
其中hStdOutput,hStdError传给hWritePipe,hStdInput传给hReadPipe,然后把管道的另一端的句柄保存起来。就可以用ReadFile/WriteFile从这些句柄读取/写入控制台程序的输出/输入。
要注意的是这些句柄的继承性,调用CreateProcess时注意设置BOOL bInheritHandles = TRUE,使它可以继承主进程的句柄。调用CreatePipe要设置LPSECURITY_ATTRIBUTES lpPipeAttributes参数使Pipe的句柄能够被继承。
此外,这样使CreatePipe创建的两个句柄都可以被继承了,所以要调用DuplicateHandle把不需要传入子进程的句柄设置为不可继承。不然子进程拥有了另一个句柄但是不会调用Closehandle减少引用记数,会导致Pipe不能被在使用完毕后被撤消。
此外注意关闭所有使用过的内核对象句柄。
dtor
2008-09-10
打赏
举报
回复
帮顶
cnzdgs
2008-09-06
打赏
举报
回复
把运行情况在描述具体一些。客户端是什么意思?是cmd进程吗?
sys0000
2008-09-06
打赏
举报
回复
可以使用共享内存
cuilonggang
2008-09-06
打赏
举报
回复
服务器创建CMD.EXE子进程,客户端通过网络连接使用,就是终端SHELL,网络通信没有问题,现在就是卡在服务端编程上,服务端只有一个进程,可能创建多个CMD.EXE系统子进程,屏幕输出可以使用CreateConsoleScreenBuffer做到各个CMD.EXE进程互不影响,可是用WriteConsoleInput会有问题,多个CMD.EXE之间会有冲突,不能单独写入指定的CMD.EXE子进程中,具体现象是这次输入被子进程A处理,则下次B会接到输入...。
因为现在多个CMD.EXE子进程是共享父进程标准输入的,所以有这个现象。能不能通过类似CreateConsoleScreenBuffer之类的方式,创建另外的句柄传给cmd.exe子进程(也就是输入重定向但要求能使用WriteConsoleInput,或者不让子进程继承标准输入编程得到其标准输入操作),我试了CreatePipe不行,创建的句柄只能通过WriteFile写入字符流.
console屏幕处理例子
程序
console屏幕处理例子
程序
。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\
控制台
程序
无图标
问题
build->run后,仿真器启动后可能自动关闭
控制台
程序
也可能一直显示
控制台
程序
。但在模拟器上看不到
控制台
程序
的图标。1. 因为
控制台
程序
运行结束后退出了。2. 想要
程序
退出后还能看到模拟器,必须先启动模拟器,再从模拟器启动
程序
。3.
控制台
程序
默认无法从模拟器启动的,想要在模拟器
程序
列表中看到
控制台
程序
方法一:给
程序
增加一个注册文件。增加一个yourapp_reg.rss: #include UID2 KUidAppRegistrationResourceFile UID3 0xE545A44
NTServer:将
控制台
程序
转换为Windows服务
在信息技术领域,了解
控制台
程序
和服务之间的根本区别是至关重要的。
控制台
程序
,通常被称作命令行
程序
或CLI(Command Line Interface),它们通过命令行界面接收用户输入并执行任务。相比之下,服务(Service)是一种在后台运行的软件应用
程序
,不需要用户交互,并且通常在系统启动时自动运行。NTServer是一个服务器端应用工具,用于将传统的
控制台
程序
转换为持续运行的服务。它能帮助用户在服务器上运行需要长时间运行的
程序
,同时保证
程序
运行的稳定性和可靠性。
控制台
程序
和窗口
程序
控制台
程序
是为了兼容dos而设立的,这种
程序
的运行就好像在一个窗口中运行一样,没有自己的界面(就是c++和vc++中的黑框)dos中只能是一个任务执行完之后再执行另一个任务。单任务。 此
问题
是由于使用VS编写
程序
时,出现了链接错误(就是因为单任务的
控制台
程序
没有关闭,导致链接失败。新手学习,具体深层的还没有理解) 窗口
程序
多是指windows系统中的运行
程序
是已窗口打开的,如对话框等,可关闭或
关于Qt
控制台
程序
创建一个Qt的
控制台
程序
,
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章