java与c 命名管道_在Java中创建命名管道

我正在尝试使用

Java创建命名管道.我正在使用

Linux.但是,我遇到了写入管道的问题.

File fifo = fifoCreator.createFifoPipe("fifo");

String[] command = new String[] {"cat", fifo.getAbsolutePath()};

process = Runtime.getRuntime().exec(command);

FileWriter fw = new FileWriter(fifo.getAbsoluteFile());

BufferedWriter bw = new BufferedWriter(fw);

bw.write(boxString); //hangs here

bw.close();

process.waitFor();

fifoCreator.removeFifoPipe(fifo.toString());

fifoCreator:

@Override

public File createFifoPipe(String fifoName) throws IOException, InterruptedException {

Path fifoPath = propertiesManager.getTmpFilePath(fifoName);

Process process = null;

String[] command = new String[] {"mkfifo", fifoPath.toString()};

process = Runtime.getRuntime().exec(command);

process.waitFor();

return new File(fifoPath.toString());

}

@Override

public File getFifoPipe(String fifoName) {

Path fifoPath = propertiesManager.getTmpFilePath(fifoName);

return new File(fifoPath.toString());

}

@Override

public void removeFifoPipe(String fifoName) throws IOException {

Files.delete(propertiesManager.getTmpFilePath(fifoName));

}

我正在写一个由1000行组成的字符串.写100行有效但1000行没有.

但是,如果我在外部shell上运行“cat fifo”,则程序继续执行并将所有内容写入而不会挂起.奇怪的是这个程序启动的cat子进程是如何工作的.

编辑:我在子进程上做了一个ps,它的状态为“S”.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值