我正在试图弄清楚如何在linux中使用伪终端,基本上我想创建一个telnetd克隆,我之前在一个问题中提到过.
我理解主从终端的概念,我对如何在C中使用系统调用有了基本的把握.
我的问题涉及打开slave/master文件描述符后的下一步.如何在奴隶中推出getty?网上是否有使用forkpty(),openpty()或其他API的好资源?
C中的一些例子会有所帮助.这是一个非常相似的问题,但没有人真正提供任何例子.
我正在使用Ubuntu 12.10 64bit.
我正在尝试在GDB中调试一个简单的汇编程序.但是GDB的gui模式(-tui)似乎无法找到我的汇编文件的源代码.我在目前的目录中重建了该项目并搜索谷歌无济于事,请在这里帮助我.
我的命令:
nasm -f elf64 -g -F dwarf hello.asm
gcc -g hello.o -o hello
gdb -tui hello
Run Code Online (Sandbox Code Playgroud)
似乎加载了调试信息,我可以在main()处设置断点,但屏幕的上半部分仍然显示' [No Source Available] '.
如果你有兴趣,这是hello.asm:
; hello.asm a first program for nasm for Linux, Intel, gcc
;
; assemble: nasm -f elf -l hello.lst hello.asm
; link: gcc -o hello hello.o
; run: hello
; output is: Hello World
SECTION .data ; data section
msg: db "Hello World",10 ; the string to print, 10=cr
len: equ $-msg ; "$" …Run Code Online (Sandbox Code Playgroud) 在我不断尝试理解伪终端如何工作的过程中,我编写了一个小程序来尝试运行bash.
问题是,我的突破似乎是关闭的.(仅在我按回车键后才显示shell提示.)
此外,我仍然无法正常使用ncurses程序,如vi.谁能告诉我如何为此设置伪终端?
我写得很糟糕的程序可以在这里找到,我鼓励你编译它.操作系统是GNU/Linux,谢谢.
编辑:像这样编译:gcc program.c -lutil -o program
再次编辑:看起来奇怪间距的问题是由于使用printf(),但仍然没有解决ncurses程序的问题.
只是一个语法问题,这是我的代码片段.(对不起,浏览器不允许我正确粘贴到堆栈溢出.)
#include <iostream> /* 'iostream.h' is deprecated. */
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std; /* Required. */
FILE *OpenFile(char *Filename)
{
FILE *FP;
if((FP = fopen(Filename, "r")) == NULL)
{ /* Error opening file. */
std::cout << "[!!] Unable to open database!"
<< " Are you sure it exists?\n"
<< "[<<] Database Unchanged.\n";
exit(EXIT_FAILURE); /* End program. */
}
else /* Properly opened the file. */
return FP;
}
int main(void)
{
FILE *Data; /* Our database …Run Code Online (Sandbox Code Playgroud)