Отправляет email-рассылки с помощью сервиса Sendsay

Ошибки компиляции

Привет всем!

Я тут пытаюсь скомпилировать следующий кусок кода.

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

#define MYPORT 3490

main()
{
int sockfd;
struct sockaddr_in my_addr;
...

Но при компиляции выдается ошибка.

[valery@VALERY sct1]$ gcc -o sct sct.c
sct.c: In function `main':
sct.c:10: storage size of `my_addr' isn't known

Как я понял, sockaddr_in определяется в socket.h. Возможно по каким-то
причинам это файл просто не присоединяется при компиляции и необходимо
что-нибудь еще указать в опциях gcc / написать Makefile?

Лобанов Валерий,
valery_loban***@m*****.ru

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 10876; Возраст листа: 388; Участников: 1246
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/213082



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Tue, 17 Aug 2004 12:58:00 +0400 (#213082)

 

Ответы:

On Вторник 17 Август 2004 12:58, Валерий Лобанов wrote:

...

struct sockaddr_in определяется в /usr/include/netinet/in.h

Его надо и включить.

Подробности - в man page на ip(7)

Ответить   "Sergey B. Khvatov" Tue, 17 Aug 2004 13:13:25 +0400 (#213104)

 

Валерий Лобанов <valery_loban***@m*****.ru> writes:

Определяется или объявляется? Из документации libc:

The data types for representing socket addresses in the Internet
namespace are defined in the header file `netinet/in.h'.

Вам нужно включить <netinet/in.h>

Ответить   Max Vasin Tue, 17 Aug 2004 13:27:38 +0400 (#213111)

 

Спасибо всем откликнувшимся!

Действительно, после включения этого файла все компилируется.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 10879; Возраст листа: 388; Участников: 1246
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/213128



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Tue, 17 Aug 2004 13:37:08 +0400 (#213128)

 

Доброго времени суток.
Господа и дамы, гляньте код. Не пойму в чём ошибка. Функция заменяет в
строке s1 подстроку s2 на пустое (по замыслу автора:). Получаю
Segmentation failed.
Может кто подскажет стандартную функцию?

void str_repl_null (char *s1, const char *s2)
{
char *s = NULL;
int len = strlen (s2);
s = s1;
do
{
s = strstr(s, s2); //Находим вхождение и
if (s) //если нашли, двигаем из конца найденной
{ // строки в её начало столько, сколько
// осталось до конца строки(основной)
s = (char *) memmove ((void *)s, (void *) (s + len), strlen (s+len));
printf("Zdec bili\n"); //сюда не доходим ПОЧЕМУ?
}
}
while (s);
}

char *test = "hrenhrenhrenhren<b>hren<\\b>hren";

main()
{
printf("before str_repl_null test = %s\n", test);
str_repl_null (test, "<");
printf("posle str_repl_null test = %s\n", test);
}

Ответить   "Andrey I. Klaus" Wed, 18 Aug 2004 11:59:19 +0400 (#213861)

 

Andrey I. Klaus пишет:

char *s = "aaa";

main() {
s[0] = 'b';
}

тоже вылетит по ошибке Segmentation failed

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 10893; Возраст листа: 389; Участников: 1243
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/213995



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   "Yuri N. Glibovetz" Wed, 18 Aug 2004 15:44:35 +0300 (#213995)

 

Здравствуйте, Yuri.

Вы писали 18 августа 2004 г., 16:44:35:

Спасибо. А насчёт библиотечной функции никто ничего не подскажет?

Ответить   "Andrey I. Klaus" Wed, 18 Aug 2004 17:05:27 +0400 (#214002)

 

18 Август 2004 11:59, Andrey I. Klaus написал:

[snip]

Вот здесь чтобы заработало надо написать:
char test[] = "hrenhrenhrenhren<b>hren<\\b>hren";

Причина - понятна. В первом случае в test заносится указатель на строку,
создающуюся в сенгменте памяти, в который недьзя писать (как он там
называется? .rodata?). Кстати, распечатку сегментов можно получить при помощи

readelf. Отсюда и segmentation fault.

А во втором случае test - это массив char, инициализированный содержимым
строки. В него можно писать.

Ответить   Vladimir Efremov Wed, 18 Aug 2004 17:03:35 +0400 (#213998)

 

Спасибо.

С уважением,
Андрей.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 10921; Возраст листа: 390; Участников: 1247
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/214576



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Андрей Клаус Thu, 19 Aug 2004 13:43:41 +0400 (#214576)

 

а так работает:

void str_repl_null (char *s1, const char *s2)
{
int len = strlen(s2);

while((s1 = strstr(s1, s2)) != NULL)
{
s1 = (char *)memmove((void *)s1, (void *) (s1 + len), strlen(s1 + len)
+ 1);
printf("Zdec bili\n");
}
}

int main(void)
{
char test[] = "hrenhrenhrenhren<b>hren<\\b>hren";
printf("before str_repl_null test = %s\n", test);
str_repl_null (test, "<");
printf("posle str_repl_null test = %s\n", test);
return 0;
}

On Wed, 18 Aug 2004 11:59:19 +0400, Andrey I. Klaus <akla***@l*****.ru> wrote:

Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 10900; Возраст листа: 389; Участников: 1243
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/214139



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Wed, 18 Aug 2004 17:07:54 +0300 (#214139)