bin*_*iti 5 c sockets linux ubuntu
我是新手,只是在Linux下使用C ++迈出了第一步。所以我有一些关于套接字的任务。我正在遵循指南,尤其是这份指南。和代码示例不起作用。我从这个开始:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCK_PATH "echo_socket"
int main(void)
{
int s, s2, t, len;
struct sockaddr_un local, remote;
char str[100];
if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
local.sun_family = AF_UNIX;
strcpy(local.sun_path, SOCK_PATH);
unlink(local.sun_path);
len = strlen(local.sun_path) + sizeof(local.sun_family);
if (bind(s, (struct sockaddr *)&local, len) == -1) {
perror("bind");
exit(1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我发现要编译它(代码:: Blocks),必须再包含一个:
#include <unistd.h>
Run Code Online (Sandbox Code Playgroud)
但是成功运行后,我会收到消息“绑定:不允许操作”。怎么了?我试图在根目录下运行它,但仍然无法正常工作。
某些 Unix 系统不允许您在任何地方创建套接字。确保您拥有正确的权限和正确的文件系统。(Fat32 因为它用在手机的 SD 卡上,所以不允许对文件添加额外的标志,并且可能会给您带来麻烦)最后,在较新的系统上,运行诸如 selinux 之类的安全功能可能会阻止套接字的创建。
在我的例子中我必须改变
#define SOCK_PATH "echo_socket"
Run Code Online (Sandbox Code Playgroud)
到
#define SOCK_PATH "/dev/socket/echo_socket"
Run Code Online (Sandbox Code Playgroud)
之后它立即起作用了。(在 root shell 中启动的可执行文件)
| 归档时间: |
|
| 查看次数: |
10477 次 |
| 最近记录: |