关于Linux操作系统中C语言的Bind()系统调用

148 阅读3分钟

bind()系统调用在C语言中把一个地址或名称与任何套接字绑定。这个系统调用大多被用于套接字编程。这个地址将被绑定到套接字描述符上。bind()系统调用实际包含三个参数。第一个是套接字的描述符。第二个参数是用于套接字地址的指针。该地址必须是一些本地路径。第三个参数可以是一个套接字地址的大小。今天的指南将看到 "bind() "系统调用如何在Ubuntu 20.04中使用C语言工作。所以,先从系统中登录。

例子

从Linux系统的用户账户成功正确登录后,打开shell控制台程序。你可以使用 "Ctrl+Alt+T "快捷键或从桌面活动区搜索它来启动它。启动终端控制台后,首先让我们用广为人知的查询 "touch "创建一个C语言文件,如下所示。

这个文件已经在Linux主文件夹中被创建。要打开和编辑这个文件,请使用任何简单的编辑器。最推荐的是Vim和GNU。因此,我们利用 "GNU "的nano编辑器来打开新制作的 "new.c "文件。

在编辑器中打开该文件后,我们在其中添加了下面显示的代码。这段代码包含了袜套式编程和输入输出流所需的库。在代码的一开始,我们将socket的路径定义为Ubuntu 20.04的 "home "目录。主方法已经用一个整数变量和字符类型的数组指针作为参数进行了初始化。一个整数变量 "s "已经被声明。一个用于套接字地址的结构类型变量已经被初始化。函数 "socket "被用来初始化Linux系统中的一个socket和一个大小为0的socket流。所有关于套接字的信息都被保存在其描述符 "s "中。如果套接字的大小等于"-1",它必须在退出代码编译的时候抛出一个错误信息。

函数 "memset "在这里被用来将本地套接字地址与已经定义的结构的大小结合起来。系统套接字地址的家族已经被定义。之后,系统调用strncpy用于将套接字地址复制到结构化路径中,并找到结构化路径的大小。现在主要的部分来了。我们在这里使用 "if "语句来使用bind()系统调用。bind系统调用一直在获取套接字描述符,得到结构地址并与本地套接字地址绑定,并得到套接字地址路径的大小。如果结构地址的大小等于"-1",它将打印一个错误 "bind",同时使用 "EXIT_FAILURE "函数打印一些来自系统的内置错误信息。之后代码就被保存了。

首先,用Linux系统中用于C语言的 "GCC "编译器编译你的代码。之后,在控制台中用 "a.out "查询执行该文件。输出会抛出一个异常,即地址已经在使用中。它表示的是Linux系统的 "home "目录,该目录一直在被用户使用。

让我们打开同样的 "new.c "文件,对它做一点改变。我们必须在控制台应用程序中使用同样的 "nano "查询,在编辑器中打开它进行编辑。文件被正确打开后,我们改变了在代码顶部定义的Socket路径。我们将路径从 "home "改为 "Pictures",以获得不同的结果。

编译后,文件被执行,得到了另一条消息。这条信息也显示了访问路径 "Pictures "的错误 "Permission denied"。

结论

所以,这就是关于Linux操作系统中C语言的Bind()系统调用的全部内容。我们已经对套接字编程做了简单的解释。