Portál AbcLinuxu, 19. dubna 2024 15:44
#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; }
TYPE may be: b create a block (buffered) special file c, u create a character (unbuffered) special file p create a FIFOPraktické experimenty to potvrzují.
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.