LINUX.ORG.RU

unix socket


0

0

Такая проблема: не могу скормить полный путь к файлу, получается только относительный.
srvr_name_unix это struct sockaddr
srvr_name_unix.sa_family=AF_LOCAL;

strcpy(srvr_name_unix.sa_data, "/home/ddr/proga/socket.soc"); - вот так не хочет (bind ругается, который ниже идет)
а если вот так:
strcpy(srvr_name_unix.sa_data, "socket.soc");
то все отлично.

В чом проблема? Естественно перед запуском этот файл удаляется.

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

Отсюда мораль: никогда, НИКОГДА не используй str(cat|cpy). За это в приличном обществе бьют ногами по голове.

PS: за использование strn(cat|cpy) бьют по яйцам, утащи strl(cat|cpy) из *BSD.

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

> Проблема решена. sa_data - массив размером 14, а я туда пытался длинное имя запихать.

Лучше использовать указатели, ИМХО

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от kemm

> PS: за использование strn(cat|cpy) бьют по яйцам Так ты уже всего лишился?!

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от roy

man strlcat намекает:
>They are designed to be safer, more consistent, and less error prone replacements for strncpy(3) and strncat(3). Unlike those functions, strlcpy() and strlcat() take the full size of the buffer (not just the length) and guarantee to NUL-terminate the result (as long as size is larger than 0 or, in the case of strlcat(), as long as there is at least one byte free in dst).

hizel ★★★★★
()
Ответ на: комментарий от BreadFan

>Он еще забивает нулями буфер от конца строки до указанного размера, что может оказаться нерациональным
Ога только в юникс сокете, в название должен 0 в конце стоять, насколько я помню, если бы не оно то , насколько я понял, надо было бы юзать bzero, хотя я можт и гоню:)

DDR ★★
() автор топика
Ответ на: комментарий от DDR

ну, вот strlcpy и компания и забивают только один 0 вместо n-strlen(dst) :)

BreadFan ★★
()
Ответ на: комментарий от DDR

Это он в описании структуры 14 байт, а так, если я правильно помню, то нужно с самого начала выделять через malloc() или ещё как достаточно места под структуру struct sockaddr.

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

>Это он в описании структуры 14 байт, а так, если я правильно помню, то нужно с самого начала выделять через malloc() или ещё как достаточно места под структуру struct sockaddr.
Может быть, чот я с этими юникс сокетами запарился инфу искать.

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