小编Mah*_*ouk的帖子

UNIX中的管道可以双向工作吗?

看看下面的代码:

#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>

main() {
    int pipdes[2];
    char buff[50];
    const char parent[]="Parent Writes. Child Reads\n";
    const char child[]="Child Writes. Parent Reads\n";
    if(pipe(pipdes)==0) {
        pid_t pid=fork();
        if(pid<0)
              printf("Error\n");
        if(pid==0){
            read(pipdes[0],buff,50);
            printf("Parent: %s",buff);
            write(pipdes[1], child, strlen(child));
            exit(0);
        }
        else if(pid>0) {
            write(pipdes[1], parent, strlen(parent));
            wait(pid);
            read(pipdes[0], buff, 50);
            printf("Child: %s", buff);
        }
    }
    else
        printf("Error in pipe\n");
}
Run Code Online (Sandbox Code Playgroud)

现在,我在这里创建了一个管道,但这两个进程都可以读写.管道不应该是单向的.此外,当我把传统的'close(pipdes [0])'用于父级和'close(pipdes [1])'用于子级时,代码不起作用,尽管我添加了open(pipdes [0])函数后来.

我对UNIX和管道的概念仍然是原始的,所以我可能在这里有点蹩脚,但请你协助.

c unix pipe

8
推荐指数
2
解决办法
8847
查看次数

AMD 处理器的单步客户操作系统指令:AMD 的 Intel Monitor Trap Flag 等效项

我正在编写一个调试器,它应该跟踪虚拟机中来宾操作系统的执行情况。Intel VMX Monitor Trap Flag 字段使我们能够单步执行客户操作系统指令。

但我正在使用 AMD 处理器,并且在文档中没有找到任何等效的内容。有人知道 Intel VTX Monitor Trap Flag 是否有等效的 AMD SVM 吗?

debugging virtualization x86 intel amd-processor

6
推荐指数
0
解决办法
373
查看次数

使用gdbserver和qemu进行调试,如何在控制寄存器cr3上设置watchpoint

我正在调试内核,我想知道cr3寄存器何时被更改.我知道如何在像eax和其他人这样的通用寄存器上设置观察点.

问题是,由于gdb无法访问控制寄存器,因此在cr3上设置观察点不起作用.

那么,是否可以从qemu监视器设置观察点?如果有,怎么样?

gdb kernel breakpoints qemu watchpoint

5
推荐指数
1
解决办法
599
查看次数

一种从本地 sysroot 和远程 gdbserver 加载 GDB 库的方法

在使用 gdbserver 进行远程调试时,我想让 gdb 从本地 sysroot 加载正在调试的程序的一些共享库,但也允许从 gdbserver 下载功能加载其他不在 sysroot 中的功能。

gdb 似乎只能使用一种方法来查找库、本地文件或远程下载,而不能同时使用这两种方法。

例如,如果我将 sysroot 设置target:/为使用远程文件,则所有内容都将被下载:

(gdb) set sysroot target:/
(gdb) run
Starting program:  
Reading /root/a.out from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /root/a.out from remote target...
Reading symbols from target:/root/a.out...
Reading /lib/ld-linux-armhf.so.3 from remote target...
Run Code Online (Sandbox Code Playgroud)

不幸的是,远程系统上的系统库没有调试符号。它是一个闪存空间有限的嵌入式系统。调试符号会大大增加文件系统的总大小,而且根本不适合。

但是,我有一个所有系统库的本地 sysroot 树,这确实包括调试符号。但是如果我将 sysroot 设置为这棵树,gdb 将不再考虑远程下载。

(gdb) set sysroot /bsp/sysroot
(gdb) run
Starting program:  
Reading symbols from …
Run Code Online (Sandbox Code Playgroud)

debugging gdb gdbserver

5
推荐指数
1
解决办法
2040
查看次数

C ++:根据int值的基数使用条件格式进行打印

在c ++中,是否有任何格式说明符可根据其值以不同的基数打印无符号?格式说明符表达如下内容:

using namespace std; 
if(x > 0xF000) 
   cout << hex << "0x" << x;
else 
   cout << dec << x ;
Run Code Online (Sandbox Code Playgroud)

因为在当前项目中我必须做很多次,所以我想知道c ++是否提供了这样的格式说明符。

c++ format cout

0
推荐指数
1
解决办法
49
查看次数