Java 和 C 是兩種流行的編程語言,它們在編程思想、語法結構等方面有很多相似點。在多進程或多線程編程中,管道 (pipe) 是一種常用的通信方式。Java 和 C 都提供了管道相關的 API。
Java中管道的實現類為 PipedOutputStream 和 PipedInputStream。一個 PipedInputStream 對應一個 PipedOutputStream,它們通過調用 connect() 方法連接到一起。PipedOutputStream 可以調用 write() 方法將數據寫入管道,PipedInputStream 調用 read() 方法從管道讀取數據。
//Java 中使用管道通信的示例代碼 PipedOutputStream pos = new PipedOutputStream(); PipedInputStream pis = new PipedInputStream(); pis.connect(pos); new Thread(() -> { try { pos.write("hello pipe".getBytes()); } catch (IOException e) { e.printStackTrace(); } }).start(); byte[] bytes = new byte[1024]; int len = pis.read(bytes); System.out.println(new String(bytes, 0, len));
C語言的管道實現則存在于頭文件 unistd.h 中,使用系統調用 pipe() 創建管道。通過在父進程與子進程之間共享文件描述符,C 程序就可以通過管道實現進程間通信,實現方式與 Java 相似。
//C語言中使用管道通信的示例代碼 int fd[2]; pipe(fd); if (fork() == 0) { close(fd[0]); write(fd[1], "hello pipe", strlen("hello pipe")); } else { close(fd[1]); char buf[1024]; read(fd[0], buf, sizeof(buf)); printf("%s", buf); }
綜上所述,Java 和 C 語言都提供了管道相關的 API,使用方式類似。通過管道,程序可以實現進程間通信,方便數據傳輸。