Portál AbcLinuxu, 19. dubna 2024 15:44


Dotaz: Ako vytvorit socket v shelli?

7.10.2005 17:25 Semo | skóre: 45 | blog: Semo
Ako vytvorit socket v shelli?
Přečteno: 187×
Odpovědět | Admin
Ako mam vytvorit unix socket z bashu?

Cez mkfifo sa da vytvorit pomenovana rura, ale netusim cim vyrobit unix socket. Potrebujem to na to logovanie zo skriptov.
If you hold a Unix shell up to your ear, you can you hear the C.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.10.2005 17:39 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Ako vytvorit socket v shelli?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak uz som to ciastocne vyriesil. Skopiroval som si iny socket najdeny v systeme a premenoval ho. Ale stale to neriesi otazku, ci existuje prikaz na rozumnejsie vyrabanie socketov.
If you hold a Unix shell up to your ear, you can you hear the C.
Marián Oravec avatar 7.10.2005 21:26 Marián Oravec | skóre: 22 | Nitra
Rozbalit Rozbalit vše Re: Ako vytvorit socket v shelli?
Ze by socket?
Mám rád elektro, ale vypočujem si aj iné...
7.10.2005 17:55 socat
Rozbalit Rozbalit vše Re: Ako vytvorit socket v shelli?
Odpovědět | | Sbalit | Link | Blokovat | Admin
možná socat...
8.10.2005 15:48 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Tak som si to napisal sam
Odpovědět | | Sbalit | Link | Blokovat | Admin
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>

#define	UNIX_PATH_MAX	108

extern int optind;
extern int errno;

void print_usage(char *basename)
{
	printf("Usage: %s [-m mode] sock1 ...\n\t-m\toctal permissions\n",basename);
}

int main(int argc, char **argv)
{
	int fd, mode, i, res;
	char option;
	char *endptr;
	
	struct sockaddr_un sa;

	while ( (option=getopt(argc, argv, "m:")) != -1 ) {
		switch (option) {
			case 'm':
				if (! optarg) {
					print_usage(argv[0]);
					exit(1);
				}
				mode = strtol(optarg, &endptr, 8);
				if (*endptr != '\0') {
					printf("%s is not valid mode.\n", optarg);
					print_usage(argv[0]);
					exit(1);
				}
				break;
			default:
				print_usage(argv[0]);
				exit(1);
		}
	}

	if (argc <= optind) {
		printf("Too few arguments.\n");
		print_usage(argv[0]);
		exit(1);
	}
	
	res = 0;
	i = optind;
	while (i < argc) {
		if ( (fd=socket(PF_UNIX, SOCK_STREAM, 0)) == -1) {
			perror("Cannot create socket");
			exit(1);
		}
	
		sa.sun_family = AF_UNIX;
		strncpy(sa.sun_path, argv[i], UNIX_PATH_MAX-1);
		sa.sun_path[UNIX_PATH_MAX-1] = '\0';
		if (bind(fd, (struct sockaddr *) &sa, sizeof(struct sockaddr)) == -1) {
			fprintf(stderr, "Cannot create name `%s' in filesystem: %s\n", argv[i], strerror(errno));
			res = 2;
		}
	
		if (chmod(argv[i], mode) == -1) {
			perror("Cannot set permissions");
			res = 2;
		}
		
		i++;
	}
	
	return res;
}
If you hold a Unix shell up to your ear, you can you hear the C.
8.10.2005 17:56 Beda
Rozbalit Rozbalit vše Re: Ako vytvorit socket v shelli?
Odpovědět | | Sbalit | Link | Blokovat | Admin
strilim od boku.

man mknod

c - character b - block s - socket (todle teda hadam)

ale vzpominam si, ze me zaskocilo, ze roury maji vlastni nastroj - mkfifo, ale pak jsem mi doslo, ze i linky - ln
8.10.2005 18:13 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Ako vytvorit socket v shelli?
Nechci vypadat jako kverulant, ale manuálová stránka tvrdí něco jiného:
TYPE may be:

       b      create a block (buffered) special file

       c, u   create a character (unbuffered) special file

       p      create a FIFO
Praktické experimenty to potvrzují.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.