小编sav*_*v0h的帖子

在C中,当没有东西可读时,读取功能如何"知道"?

在下面的程序(不是我的程序,但是我修改过的程序)中,子进程对管道进行了两次写入.当我运行该程序时,我得到以下输出:

Received string: Hello, world!
This is the child process.
Run Code Online (Sandbox Code Playgroud)

如何由父进程执行的读取从管道缓冲区中捕获这两个字符串?什么(如果有的话)阻止父进程在读取第一个字符串(或第一个字符串的第一个字符串)之后假设没有其他内容可以从缓冲区中读取并退出?

有问题的计划:

int main(void)
{
    int     fd[2], nbytes;
    pid_t   childpid;
    char    string[] = "Hello, world!\n";
    char    string2[] = "This is the child process.\n";
    char    readbuffer[80];

    pipe(fd);

    if((childpid = fork()) == -1)
    {
            perror("fork");
            return 1;
    }

    if(childpid == 0)
    {
            /* Child process closes pipe's input file descriptor */
            close(fd[0]);

            /* Send "string" through the output side of pipe */
            write(fd[1], string, (strlen(string)));
            write(fd[1], string2, (strlen(string2)+1));
            return 1; …
Run Code Online (Sandbox Code Playgroud)

c fork pipe parent-child

9
推荐指数
1
解决办法
9881
查看次数

在C中,为什么指定char-variable变量的值在分配后不能改变?

我不明白这种情况的区别:

#include <stdio.h>

int main()
{
  int i = 0;
  i = 1;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这种情况:

#include <stdio.h>

int main()
{
  char *mychar = "H";
  *mychar = "E";

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会产生编译器警告"赋值使指针在没有强制转换的情况下生成整数".

不应该*mychar = "E"取消引用mychar为其赋值"E"?

非常感谢.

c pointers variable-assignment

7
推荐指数
2
解决办法
2390
查看次数

在C中,为什么不能将整数值赋给int*,就像将字符串值赋给char*一样?

我一直在浏览网站,但尚未找到答案.

用一个例子来解释这个问题是最容易的(至少对我来说).

我不明白为什么这是有效的:

#include <stdio.h>

int main(int argc, char* argv[])
{
  char *mystr = "hello";
}
Run Code Online (Sandbox Code Playgroud)

但是这会产生一个编译器警告("初始化使整数从没有强制转换的整数中生成"):

#include <stdio.h>

int main(int argc, char* argv[])
{
  int *myint = 5;
}
Run Code Online (Sandbox Code Playgroud)

我对第一个程序的理解是创建一个名为mystr的变量,类型为pointer-to-char,其值是字符串文字"hello"的第一个字符('h')的地址.换句话说,使用此初始化,您不仅可以获取指针,还可以定义指针指向的对象(在本例中为"hello").

那么,为什么int *myint = 5;看起来似乎没有实现与此类似的东西,即创建一个名为myint的变量类型指针指向int,其值是值'5'的地址?为什么这个初始化既不给我指针也定义指针所指向的对象?

c int pointers char

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

一种方法调用,多种可能的错误条件 - 如何在面向对象编程中进行管理?

我是Java/OOP的新手,我有兴趣了解这个问题的标准方法.

假设我的Java程序包含以下主要方法:

public static void main(String[] args) {
    String name = args[1];
    Person person = PersonHelper.getPerson(name);
}
Run Code Online (Sandbox Code Playgroud)

想象一下,调用getPerson方法(在PersonH​​elper.java中定义的其他方法和类的帮助下)执行以下操作:

  1. 从模板构建URL以从远程服务器获取有关"名称"的数据,例如https://allofthepeople.com/name成为https://allofthepeople.com/Alice
  2. 使用此URL将有关Alice的JSON格式数据从服务器读入缓冲区
  3. 使用JSON解析器将此数据反序列化为Person对象
  4. 返回对象

现在有(至少)三个异常可以在此例程中抛出:

  1. MalformedURLException(例如,如果我传入二进制数据而不是名称)
  2. IOException(例如,如果/ Alice不存在)
  3. JSONParseException(例如,如果服务器的响应不是JSON格式)

假设调用getPerson(在这种情况下为main)的方法需要能够区分这三个异常,应该如何做?我没有看到异常本身是如何返回的,因为赋值Person person = PersonHelper.getPerson(name)是期望一个Person对象.

java oop error-handling

3
推荐指数
1
解决办法
53
查看次数

函数返回后esp的值是多少?

在C/x86中,当从函数返回时,我们通常:

  1. pop ebp 恢复上一个函数的帧指针
  2. ret其中(据我所知)包含一个隐式,pop eip以便调用函数可以继续从返回地址执行

在这一点上,我可以期待esp包含什么?它是指向返回地址正上方的指针,还是esp的值也被隐含地改变了ret

谢谢 :)

c x86 assembly nasm

3
推荐指数
1
解决办法
1150
查看次数

标签 统计

c ×4

pointers ×2

assembly ×1

char ×1

error-handling ×1

fork ×1

int ×1

java ×1

nasm ×1

oop ×1

parent-child ×1

pipe ×1

variable-assignment ×1

x86 ×1