리눅스 명명 된 소켓 하우투 8 15:54 /tmp/socket 이제를 사용하여

리눅스에는 소켓과 파이프 (fifo)가 있다는 것을 알고 있습니다.

에서 ls -l, 그들은 다음과 같이 보일 것이다 : (I 데모를 들어, 파일 이름을 변경했습니다.)

prw-r--r-- 1 root root 0 Nov  8 16:31 /tmp/fifo
srwxrwxrwx 1 root root 0 Nov  8 15:54 /tmp/socket

이제를 사용하여 명명 된 파이프를 만들 수 있습니다 mkfifo. 명명 된 소켓을 만드는 명령이 있습니까?

마지막 옵션은 mknod 함수를 호출하는 C 프로그램을 작성하는 것이지만 이미 해당 명령이 있는지 알고 싶었습니다.

내가 시도한 것 :
mknod & mkfifo에 대한 옵션을 찾으려고했지만 찾을 수 없었습니다.

참고 : 이더넷 / 네트워크를 통한 서버 클라이언트 모델에 대해서는 논의하고 있지 않습니다. 명명 된 소켓 파일은 동일한 시스템에서 2 개의 프로세스에 의해 사용됩니다.



답변

유닉스 / 리눅스 소켓 파일은 기본적으로 양방향 FIFO입니다. 소켓은 원래 네트워크 통신을 관리하기위한 방법으로 작성되었으므로 send()recv()시스템 호출을 사용하여 소켓을 조작 할 수 있습니다 . 그러나 “모든 것이 파일입니다”라는 유닉스 정신에서 write()및 을 사용할 수도 있습니다 read(). 명명 된 소켓 을 사용 socketpair()하거나 socket()만들어야합니다. C에서 소켓을 사용하는 방법은
Beej ‘s Guide to Unix IPC : Unix Sockets에 있습니다.

socat당신이 “진짜”프로그램을 작성하지 않고 소켓 놀러 할 때 명령 행 유틸리티 유용합니다. netcat다른 네트워킹과 파일 인터페이스 간의 어댑터와 유사 하며 어댑터 역할을합니다.

모래밭:


답변

파이썬에서 신속하게 소켓을 만듭니다.

~]# python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/somesocket')"
~]# ll /tmp/somesocket
srwxr-xr-x. 1 root root 0 Mar  3 19:30 /tmp/somesocket

또는 작은 C 프로그램을 사용하여 다음을 저장하십시오 create-a-socket.c.

#include <fcntl.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    // The following line expects the socket path to be first argument
    char * mysocketpath = argv[1];
    // Alternatively, you could comment that and set it statically:
    //char * mysocketpath = "/tmp/mysock";
    struct sockaddr_un namesock;
    int fd;
    namesock.sun_family = AF_UNIX;
    strncpy(namesock.sun_path, (char *)mysocketpath, sizeof(namesock.sun_path));
    fd = socket(AF_UNIX, SOCK_DGRAM, 0);
    bind(fd, (struct sockaddr *) &namesock, sizeof(struct sockaddr_un));
    close(fd);
    return 0;
}

그런 다음 gcc를 설치하고 컴파일 한 다음 ta-da를 실행하십시오.

~]# gcc -o create-a-socket create-a-socket.c
~]# ./create-a-socket mysock
~]# ll mysock
srwxr-xr-x. 1 root root 0 Mar  3 17:45 mysock


답변

소켓은 항상 해당 소켓으로 전송 된 요청을 처리하는 서버에 연결되므로 소켓을 작성하기위한 명령 행 도구가 없습니다.

따라서 서버를 작성하고 소켓을 작성해야합니다. 여기 튜토리얼이 있습니다.


답변