LINUX.ORG.RU

chmod


0

0

подскажите, как сделать из прав доступа типа
-rwxrwxr-x
следующее:
srwxrwxr-x

и если можнго объясните, что значит 's'?

anonymous

Ответ на: комментарий от Obidos

не пойму почему не работает пример
действительно, бит 's' появляется после bindinga


ошибка при связывании:

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#define MAXBUF 256

char* msg = "Hello, World, using sockets!";
char buf[MAXBUF];

int main() {
struct sockaddr_un serv_addr, clnt_addr;
int sockfd;
int saddrlen, caddrlen, msglen, n;

bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path, "./echo.server");
saddrlen = sizeof(serv_addr.sun_family) + strlen(serv_addr.sun_path);

if(sockfd = socket(AF_UNIX, SOCK_DGRAM, 0) < 0) {
printf("Can't create the socket\n");
exit(1);
}

bzero(&clnt_addr, sizeof(clnt_addr));
clnt_addr.sun_family = AF_UNIX;
strcpy(clnt_addr.sun_path, "./clnt.XXXXXX");
mkstemp(clnt_addr.sun_path);

caddrlen = sizeof(clnt_addr.sun_family) + strlen(clnt_addr.sun_path);

printf("%d\n", sockfd);
printf("%d\n", caddrlen);
printf("%s\n", clnt_addr.sun_path);

if(bind(sockfd, (struct sockaddr*) &clnt_addr, caddrlen) < 0) {
printf("Binding error\n");
exit(1);
}

msglen = strlen(msg);

if(sendto(sockfd, msg, msglen, 0, (struct sockaddr*) &serv_addr, saddrlen) != msglen) {
printf("Sending error\n");
exit(1);
}

//echo reading
if((n = recvfrom(sockfd, buf, MAXBUF, 0, NULL, 0)) < 0) {
printf("Receiving error\n");
exit(1);
}

printf("Echo: %s\n", buf);
close(sockfd);
unlink(clnt_addr.sun_path);

return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

вместо if(sockfd = socket(AF_UNIX, SOCK_DGRAM, 0) < 0) { надо if((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) {

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.