int
pipe(
int
fildes[
2]
)
{
int
tcp1,
tcp2;
sockaddr_in
name;
memset
(
&
name,
0,
sizeof
(
name)
)
;
name.
sin_family =
AF_INET
;
name.
sin_addr.
s_addr =
htonl
(
INADDR_LOOPBACK
)
;
int
namelen =
sizeof
(
name)
;
tcp1 =
tcp2 =
-
1;
int
tcp =
socket
(
AF_INET
,
SOCK_STREAM
,
0)
;
if
(
tcp =
=
-
1)
{
goto
clean;
}
if
(
bind
(
tcp,
(
sockaddr
*
)
&
name,
namelen)
=
=
-
1)
{
goto
clean;
}
if
(
listen
(
tcp,
5)
=
=
-
1)
{
goto
clean;
}
if
(
getsockname
(
tcp,
(
sockaddr
*
)
&
name,
&
namelen)
=
=
-
1)
{
goto
clean;
}
tcp1 =
socket
(
AF_INET
,
SOCK_STREAM
,
0)
;
if
(
tcp1 =
=
-
1)
{
goto
clean;
}
if
(
-
1 =
=
connect
(
tcp1,
(
sockaddr
*
)
&
name,
namelen)
)
{
goto
clean;
}
tcp2 =
accept
(
tcp,
(
sockaddr
*
)
&
name,
&
namelen)
;
if
(
tcp2 =
=
-
1)
{
goto
clean;
}
if
(
closesocket(
tcp)
=
=
-
1)
{
goto
clean;
}
fildes[
0]
=
tcp1;
fildes[
1]
=
tcp2;
return
0;
clean:
if
(
tcp !
=
-
1)
{
closesocket(
tcp)
;
}
if
(
tcp2 !
=
-
1)
{
closesocket(
tcp2)
;
}
if
(
tcp1 !
=
-
1)
{
closesocket(
tcp1)
;
}
return
-
1;
}
缺点很明显
1、效率低下。
2、占用了两个TCP端口。
3、accept的返回值未必就是tcp1连接过来的(多线程或者别的进程在干预), 所以最好通过发送数据进行确认。
4、由于不是匿名的, 所以可以在netstat里面看到。
优点只有一个, 可以使用select调用。
相关推荐
3. **模拟与执行**:通过模拟,用户可以观察Petri网模型在不同初始条件下的行为,预测系统可能的行为路径。 4. **性能分析**:PIPE还可以进行性能评估,如计算平均响应时间、吞吐量等关键性能指标,为系统优化提供...
7. Windows和Linux平台间的差异:文档可能提到了如何在Windows平台上模拟类似Linux的文件描述符操作,因为在Windows中使用的是句柄(handle),而不是文件描述符。 8. 关键类`StdoutToDebugString`:在文档中定义了...
这些库提供了模拟Linux API的接口,使得可以在Windows环境下编译和运行原本为Linux设计的代码。另外,`MinGW`或`MSYS2`也可以帮助你构建一个接近于Linux环境的开发环境。 总之,`dirent.h`和`unistd.h`是Linux开发...
Git Bash是一个为Windows系统提供的模拟Unix shell的工具,它允许用户在Windows上使用类似于Linux或Mac的命令行体验。 描述中的“命令均在Git Bash下完成,兼容Linux和Mac”进一步强调了这些命令的跨平台特性。在...
- **双系统安装**:在同一台计算机上安装两个操作系统(如Windows和Linux),用户可以选择启动时使用的系统。 - **虚拟机安装**:在已有的操作系统(如Windows)上安装虚拟机软件,再通过虚拟机软件安装Linux系统。 ...
- **模拟执行**:用户可以模拟Petri网的行为,观察系统在不同初始状态下的动态演变,帮助理解系统的运行机制。 - **转换和优化**:编辑器可能提供转换和优化功能,将复杂的Petri网模型转化为更简单的形式,或者优化...
在Windows平台的设计题目中,虽然具体的技术细节可能不同,但基本原理和Linux平台相似,包括进程调度、内存管理、磁盘调度等,这些都是操作系统设计的基础组成部分。 通过这些课程设计,学生能深入理解操作系统的...
Wine作为一个重要的兼容层,被设计用于让Windows应用程序能够在非Windows操作系统(如Linux)上运行。它不仅仅是一个简单的转换工具,而是包含了复杂的系统架构和服务机制。本文旨在探讨Wine的核心组件及其工作原理...
在Linux环境下,对录音笔进行时间设置可能会遇到一些挑战,特别是当录音笔依赖于特定的Windows应用程序时。本文将详细讲解如何在Linux下为录音笔设置时间,避免使用不兼容的Windows程序,并解决Linux系统中与此相关...
Wine,全称“Wine Is Not an Emulator”,是一种开源软件,其主要目标是使Linux和其他类Unix操作系统能够运行原本设计为在Microsoft Windows环境下运行的应用程序。Wine通过创建一个兼容层,模拟Windows API,实现了...
- **Ubuntu**:作为实验的操作系统平台,提供了一个稳定的Linux环境。 - **GCC**:用作C语言编译器,用于编译和链接实验所需的C语言代码。 #### 实验过程 ##### 题目一:进程间的管道通信 1. **实验设计**: - ...
在Cygwin中,`Clipboard`库可能会依赖于Windows API或者模拟Linux的行为。确保`clipboard` gem已安装,然后按照Windows的用法进行操作。 总结起来,`Clipboard`库为Ruby开发者提供了一种跨平台的方式来访问剪贴板,...
Cygwin是一种在Windows操作系统上模拟Linux环境的开源工具集,它允许用户在Windows上运行许多原本只能在类Unix系统(如Linux或FreeBSD)上运行的命令行工具和程序。 教程首先介绍了Cygwin的安装和配置,包括如何...
在Windows环境下,通常使用的进程间通信方式有管道(pipe)、套接字(socket)、共享内存、命名管道(named pipe)等,但这些机制可能无法满足所有需求,尤其是在需要保持消息顺序或者支持优先级的场景下。...
开发者可以使用MinGW-w64这样的工具,它提供了一个模拟Windows API的环境,使Visual Studio项目能在Linux下编译和运行。通过设置编译选项和链接库,C++代码可以被编译为适应Linux环境的可执行文件。 在Visual C++中...
【操作系统实验报告】 ...同时,实验还让学生对比了Linux和Windows操作系统的特点,认识到Linux的编译系统强大,而Windows提供了更直观的用户界面。这些经验对于深入理解操作系统和软件开发具有重要意义。
`pevents-master`这个项目可能就是针对这个问题提供的一种解决方案,它可能是通过用户空间的实现来模拟Windows Event对象的行为。开发者可能使用了内核提供的异步通知机制(如`epoll`、`poll`或`select`)和线程同步...
Git_2.9.3-32-bit.rar 是一个针对32位操作系统的Git的特定版本压缩包,其中包含了GitBash,这是一个在Windows环境下模拟Linux命令行环境的工具,使得用户可以在Windows上充分利用Git的强大功能。 Git的核心概念包括...
在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub系统的源代码,对不同介质上的FAT格式文件系统进行分析。要求在Linux环境下设计出C语言程序,实现以下功能: 1)...