小编Ros*_*ews的帖子

Objective-C 2.0垃圾收集是否收集C结构?

Objective-C垃圾收集器究竟收集了什么?例如,如果我在Objective-C 2.0中编写程序,并且使用一些普通的C结构,我的代码是否需要担心手动释放该内存?

c struct garbage-collection memory-management objective-c

9
推荐指数
2
解决办法
482
查看次数

将C程序中的stdin重定向到另一个进程

我有一个C程序,我想让它用tr过滤所有输入.所以,我想启动tr作为子进程,将我的stdin重定向到它,然后捕获tr的stdout并从中读取.

编辑:这是我到目前为止的代码,它不起作用.它立即发生了段错误,但我不明白为什么:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv){
  int ch;
  int fd = stripNewlines();

  while((ch = getc(fd)) != EOF){
    putc(ch, stdout);
  }

  return 0;
}

int stripNewlines(){
  int fd[2], ch;
  pipe(fd);

  if(!fork()){
    close(fd[0]);

    while((ch = getc(stdin)) != EOF){
      if(ch == '\n'){ continue; }
      putc(ch, fd[1]);
    }

    exit(0);
  }else{
    close(fd[1]);

    return fd[0];
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:原来这是两件事:一个是我的标题没有将stdin和stdout定义为0和1,所以我实际上正在读/写完全随机的管道.另一个原因是由于某种原因,getc和putc不能正常工作,所以我不得不使用read()和write().如果我这样做,它是完美的:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv){
  int ch;
  int fd = stripNewlines();

  while(read(fd, &ch, 1) == 1){
    write(1, &ch, 1); …
Run Code Online (Sandbox Code Playgroud)

c unix stdin

6
推荐指数
1
解决办法
9048
查看次数