LINUX.ORG.RU

Сообщения vasirck

 

SVC: как получить patch по имеющемуся commit log?

У меня есть commit log. Мне нужно получить patch, то есть diff по всем файлам с ревизиями указанными в commit patch.

Можно конечно сделать diff на каждый файл, но их там больше 30 шт.

Можно написать скрипт, но если уже есть какой-то способ, то зачем изобретать велосипед.

vasirck
()

Как вырезать tag из html-файла?

Например есть html-файл:

<body><TAG 12312937> asldasjld
asdl'a;sld
asdas;dk;la
asdpl[asp
qwekopqkwe </TAG></body>

Как можно вырезать TAG вместе с содержимым,
то есть чтоб осталось только:

<body>
</body>

sed-ом не получается, по-мойму он понимает только то,
что в одной строке, а что на несколько разнесено, то не понимает.
vasirck
()

emacs, заголовок окна

Как сделать чтоб в заголовке x-окна emacs было не emacs-x@localhost.localdomain, а например название редактируемого файла?

vasirck
()

nmap

Запускаю nmap extsrv на extsrv:
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-12-21 11:41 MSK
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1661 ports scanned but not shown below are in state: closed)
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh

Запускаю с другого компьютера:
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-12-21 11:39 MSK
Interesting ports on extsrv (....):
(The 1658 ports scanned but not shown below are in state: closed)
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
389/tcp  open  ldap
1002/tcp open  windows-icfw
1720/tcp open  H.323/Q.931

netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:ftp                       *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN

Откуда берутся открытые порты 389, 1002, 1720?
И как их закрыть?
vasirck
()

Валится на throw

Разве так нельзя писать?

-----------------------------------------------------------------
#include <exception>
#include <iostream>

class my_error: public std::exception {
private:
        std::string m_err;
public:
        my_error(const std::string &err) throw() : m_err(err) {}
        ~my_error() throw() {}
        virtual const char* what() const throw() { return m_err.c_str(); }
};

int main(void)
{
        try     {
                throw my_error("FATAL ERROR");
        }
        catch(my_error &e)      {
                std::cout << "exception handled: " << e.what() << std::endl;
        }

        return 0;
}
-----------------------------------------------------------------

Если компилирую кросскомпилятором sh4-linux-gcc v3.0.3 - валится по сегфолту на throw
Компилирую gcc v3.4.3 - все работает.


Это работает и там и там:
-----------------------------------------------------------------
#include <exception>
#include <iostream>

class my_error: public std::exception {
private:
        const char *m_err;
public:
        my_error(const char *err) throw() : m_err(err) {}
        ~my_error() throw() {}
        virtual const char* what() const throw() { return m_err; }
};

int main(void)
{
        try     {
                throw my_error("FATAL ERROR");
        }
        catch(my_error &e)      {
                std::cout << "exception handled: " << e.what() << std::endl;
        }

        return 0;
}
-----------------------------------------------------------------
vasirck
()

http redirection

Допустим есть компьютер с адресом www.comp.ru, он используется как прокси для некой локальной сети. Можно сделать так, чтоб при обращении www.local1.comp.ru/... ну или www.comp.ru/local1/... он перенаправлял http запрос к некому компьютеру в локальной сети?

vasirck
()

web site & fake ip

Есть некие утройства на кот стоит linux.
Они подключаются к интернету через gprs модем.
Хочется управлять устройствами через web-интерфейс.
Так как подключение через gprs, то выдается "fake" ip,
скрытый за проксей провайдера.

Думаю, что решение может быть таким:
Написать некий сервер, кот быдет выполняться на комп с норм адресом.
При включении устройства оно будет подключаться с серверу,
говорить совое имя и не закрывать сокет, а получать по нему
http-запросы и по нему же посылать ответы.
Сервер будет просто перенаправлять запросы/ответы.
Адрес устройства будет выглядеть так:
www.сервер.ru/имя_устройства/...

Я думаю, что не первый сталкиваюсь с такой проблемой.
Может уже есть что-то готовое, чтоб велосипед не изобретать?
vasirck
()

Не компилируется std::not1(boost::mem_fn(...))

#include <typeinfo>
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <boost/shared_ptr.hpp>
#include <boost/mem_fn.hpp>
#include <boost/functional.hpp>

class Item_t
{
private:
	int m_ival;
public:
	typedef boost::shared_ptr<Item_t> sptr_t;
	int GetIval() { return m_ival; }
	Item_t(int ival):m_ival(ival) {}
	template<int ival> bool IvalLt() { return m_ival < ival; }
	void print() { std::cout << m_ival << std::endl; }

	template<int ival> static bool st_IvalLt(Item_t::sptr_t sptr) { return sptr->GetIval() < ival; }
};

int main(void)
{
	std::vector<Item_t::sptr_t> items;
	std::vector<Item_t::sptr_t>::iterator el;

	items.push_back(Item_t::sptr_t(new Item_t(10)));
	items.push_back(Item_t::sptr_t(new Item_t(5)));
	items.push_back(Item_t::sptr_t(new Item_t(30)));
	items.push_back(Item_t::sptr_t(new Item_t(20)));

	// работает
	el = find_if(items.begin(), items.end(), boost::mem_fn(&Item_t::IvalLt<7>));
	if(el != items.end())
		(*el)->print();

	// не компилируется
	el = find_if( items.begin(), items.end(), std::not1(boost::mem_fn(&Item_t::IvalLt<25>)) );
	if(el != items.end())
		(*el)->print();

	// работает
	el = find_if( items.begin(), items.end(), std::not1(std::ptr_fun(&Item_t::st_IvalLt<30>)) );
	if(el != items.end())
		(*el)->print();

	std::vector<Item_t*> items_p;
	items_p.push_back(new Item_t(5));
	items_p.push_back(new Item_t(10));

	// работает
	std::vector<Item_t*>::iterator el_p = 
		find_if( items_p.begin(), items_p.end(), std::not1(boost::mem_fn(&Item_t::IvalLt<7>)) );
	if(el_p != items_p.end())
		(*el_p)->print();
}

Пишет:
stl_algo.h:259: error: no match for call to 
`(std::unary_negate<boost::_mfi::mf0<bool, Item_t> >) 
(boost::shared_ptr<Item_t>&)'
stl_function.h:323: note: candidates are: bool 
std::unary_negate<_Predicate>::operator()(const typename 
_Predicate::argument_type&) const [with _Predicate = 
boost::_mfi::mf0<bool, Item_t>]

Если написать, boost::not1, то тоже не компилируется.
vasirck
()

fork+exec, exit, _Exit, деструктор

Из программы надо запустить другую. В связи с этим есть два вопроса.
Вопросы про linux.

1. Корректно ли делать fork+exec из одного из thread-ов?

2. Скажем есть такая программа:

class C1
{
public:
	C1() { printf("подписаться на события\n"); }
	~C1() { printf("отписаться от событий\n"); }
	int get_message() { return 0; };
};

C1 c1;

int main(void)
{
	pid_t pid = -1;
	
	pid = fork();
	if(0 == pid)
	{
		execl("/wrong_path", "/wrong_path");
		exit(1);
	}
	
//	while(0 == c1.get_message())
//	{
//		printf("do something\n");
//	}
		
	return 0;
}

Тут еще надо добавить обработчик SIGCHILD, чтоб зомби не оставались.

Если exec по какой-то причине не выполнится, то произойдет следущее:
[vasya@vasya 0]$ ./a.out
подписаться на события
отписаться от событий
отписаться от событий

Вместо exit пишу _Exit, то деструкторы не вызываются и всё происходит так как мне надо.
[vasya@vasya 0]$ ./a.out
подписаться на события
отписаться от событий

Корректно ли здесь использовать _Exit? Насколько я понимаю, вся выделенная память должна автоматически освобождаться при завершении процесса?
vasirck
()

Не получается в sun rpc вернуть строку из многопоточнго сервера

Валится то сервер, то клиент с "segmentation fault".
Если убираю строки из параметров/возвр.значений, то все работает.
У Стивенса в "UNIX: взаимодействие процессов" в примерах тоже одни int-ы передаются и в статье http://solaris.opennet.ru/base/dev/rpc_example.txt.html тоже.
Где ошибка?
Где про это подробнее можно почитать?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
first.x :

struct proc1_in {
	string name<30>;
	int age;
};
struct proc1_out {
	string msg<30>;
	int prio;
};

struct proc2_in {
	string name<30>;
	int age;
};
struct proc2_out {
	string msg<30>;
	int prio;
};

program FIRST_PROG
{
	version FIRST_VERS
	{
		proc1_out FIRST_PROC1(proc1_in) = 1;
		proc2_out FIRST_PROC2(proc2_in) = 2;
	} = 1;
} = 0x31678860;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
server:
bool_t first_proc1_1_svc(proc1_in *inp, proc1_out *outp, struct svc_req *rqstp)
{
	fprintf(stderr, "%s: name:\"%s\" age:%d\n", __func__, inp->name, inp->age);
	outp->msg = "proc1";
	outp->prio = 1;
	return TRUE;
}

bool_t first_proc2_1_svc(proc2_in *inp, proc2_out *outp, struct svc_req *rqstp)
{
	fprintf(stderr, "%s: name:\"%s\" age:%d\n", __func__, inp->name, inp->age);
	outp->msg = "proc2";
	outp->prio = 2;
	return TRUE;
}

int first_prog_1_freeresult (SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
{
	xdr_free(xdr_result, result);
	return 1;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
client:
void client(char *host)
{
	CLIENT *clnt;
	enum clnt_stat retval_1;
	proc1_out result_1;
	proc1_in  first_proc1_1_arg;
	enum clnt_stat retval_2;
	proc2_out result_2;
	proc2_in  first_proc2_1_arg;

	first_proc1_1_arg.name = "Vasya";
	first_proc1_1_arg.age = 26;
	first_proc2_1_arg.name = "Kostya";
	first_proc2_1_arg.age = 14;
	clnt = clnt_create (host, FIRST_PROG, FIRST_VERS, "tcp");
	if (clnt == NULL) {
		clnt_pcreateerror (host);
		exit (1);
	}

	retval_1 = first_proc1_1(&first_proc1_1_arg, &result_1, clnt);
	if (retval_1 != RPC_SUCCESS) {
		clnt_perror (clnt, "call failed");
	}
	printf("%s %d\n", result_1.msg, result_1. prio);

	retval_2 = first_proc2_1(&first_proc2_1_arg, &result_2, clnt);
	if (retval_2 != RPC_SUCCESS) {
		clnt_perror (clnt, "call failed");
	}
	printf("%s %d\n", result_2.msg, result_2. prio);

	clnt_destroy (clnt);
}
vasirck
()

Почему сигнал SIGINT (ctrl+c) получаю не только я, но и мои потомки?

Когда я нажимаю ctrl+c сигнал SIGINT приходит не только мне (sh4_muxgprs), но и моим потомкам (sh4_gsm0710, pppd). Порождаю потомков fork+execv. Открепляю потомков ioctl(0, TIOCNOTTY).

ps -A дает:

274 ttyp5 00:00:00 sh4_muxgprs

275 ? 00:00:00 sh4_gsm0710

276 ? 00:00:00 pppd

Когда я на жимаю ctrl+c, то pppd пишет:

Terminating on signal 2. Это сигнал SIGINT ему как-то попадает.

term signal: 2. Это мне приходит SIGINT.

Terminating on signal 15. Это сигнал SIGTERM ему как-то попадает.

term signal: 15. Это мне приходит SIGTERM.

Причем на PC такого нет, получаю сигналы только я. А на embedded sh-linux это происходит и я не знаю почему.

Когда посылаю себе SIGTERM (командой kill), то получаю только я. Поэтому думаю, что тут что-то с терминалом связано.

В общем-то это не смертельно, но интересно знать отчего такое происходит.

vasirck
()

Не могу установить rpm 4.2.1

Red hat 9.0
У меня перестал работать rpm. Тут где-то в сказали, что надо его обновить до 4.2.1
Устанавливаю из исходников
make выдает ошибки:

In file included from digest.c:6:
rpmio_internal.h:12:26: beecrypt.api.h: No such file or directory
rpmio_internal.h:16:22: beecrypt.h: No such file or directory
rpmio_internal.h:17:20: base64.h: No such file or directory
rpmio_internal.h:18:17: dsa.h: No such file or directory
rpmio_internal.h:19:24: endianness.h: No such file or directory
In file included from rpmio_internal.h:20,
                 from digest.c:6:
/usr/include/md5.h:27: parse error before "UINT4"
/usr/include/md5.h:30: parse error before '}' token
/usr/include/md5.h:38: parse error before "PROTO_LIST"
/usr/include/md5.h:39: parse error before "PROTO_LIST"
/usr/include/md5.h:41: parse error before "PROTO_LIST"
/usr/include/md5.h:43: parse error before "PROTO_LIST"
rpmio_internal.h:22:17: rsa.h: No such file or directory
rpmio_internal.h:23:19: rsapk.h: No such file or directory
rpmio_internal.h:24:18: sha1.h: No such file or directory
In file included from digest.c:6:
rpmio_internal.h:80: parse error before "mpbarrett"
rpmio_internal.h:80: warning: no semicolon at end of struct or union
rpmio_internal.h:81: warning: type defaults to `int' in declaration of `q'
rpmio_internal.h:81: warning: data definition has no type or storage class
rpmio_internal.h:82: parse error before "g"
rpmio_internal.h:82: warning: type defaults to `int' in declaration of `g'
rpmio_internal.h:82: warning: data definition has no type or storage class
rpmio_internal.h:83: parse error before "y"
rpmio_internal.h:83: warning: type defaults to `int' in declaration of `y'
rpmio_internal.h:83: warning: data definition has no type or storage class
rpmio_internal.h:84: parse error before "hm"
rpmio_internal.h:84: warning: type defaults to `int' in declaration of `hm'
rpmio_internal.h:84: warning: data definition has no type or storage class
rpmio_internal.h:85: parse error before "r"
rpmio_internal.h:85: warning: type defaults to `int' in declaration of `r'
rpmio_internal.h:85: warning: data definition has no type or storage class
rpmio_internal.h:86: parse error before "s"
rpmio_internal.h:86: warning: type defaults to `int' in declaration of `s'
rpmio_internal.h:86: warning: data definition has no type or storage class
rpmio_internal.h:89: parse error before "rsa_pk"
rpmio_internal.h:89: warning: type defaults to `int' in declaration of `rsa_pk'
rpmio_internal.h:89: warning: data definition has no type or storage class
rpmio_internal.h:90: parse error before "m"
rpmio_internal.h:90: warning: type defaults to `int' in declaration of `m'
rpmio_internal.h:90: warning: data definition has no type or storage class
rpmio_internal.h:91: parse error before "c"
rpmio_internal.h:91: warning: type defaults to `int' in declaration of `c'
rpmio_internal.h:91: warning: data definition has no type or storage class
rpmio_internal.h:92: parse error before "rsahm"
rpmio_internal.h:92: warning: type defaults to `int' in declaration of `rsahm'
rpmio_internal.h:92: warning: data definition has no type or storage class
digest.c: In function `rpmDigestInit':
digest.c:58: `md5Param' undeclared (first use in this function)
digest.c:58: (Each undeclared identifier is reported only once
digest.c:58: for each function it appears in.)
digest.c:62: `md5Reset' undeclared (first use in this function)
digest.c:63: `md5Update' undeclared (first use in this function)
digest.c:64: `md5Digest' undeclared (first use in this function)
digest.c:71: `sha1Param' undeclared (first use in this function)
digest.c:75: `sha1Reset' undeclared (first use in this function)
digest.c:76: `sha1Update' undeclared (first use in this function)
digest.c:77: `sha1Digest' undeclared (first use in this function)
make[2]: *** [digest.lo] Ошибка 1
make[2]: Выход из каталог `/home/vasya/install/rpm/4_2_1/rpm-4.2.1/rpmio'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Выход из каталог `/home/vasya/install/rpm/4_2_1/rpm-4.2.1'
make: *** [all] Ошибка 2
[root@localhost rpm-4.2.1]#

установил beecrypt 2.1.0 - не помогло
vasirck
()

Русские симоволы в С программе

Если пишу:

wchar_t ch = L'Ъ';

то выдает предупреждение:

warning: character constant too long

А если пишу:

char ch = 'Ъ';

то выдает предупреждение:

warning: multi-character character constant

У меня locale ru_RU.UTF-8, то есть русские символы заменяются последовательностью байтов. Я думаю, что строчка с wchar_t корректная, только gcc ее не так понял. Что делать?

vasirck
()

Раскладка клавиатуры

У меня в руской раскладке shift+6 - это запятая, +5 - двоеточие И "/?" так и остается, нет ".,"

Я так понял, что раскладка клавиатуры находится в файле /etc/X11/xkb/symbols/ru

Где можно взять нормальную? Да, у меня red hat 9.0.

vasirck
()

Как мне получать scan коды при нажатии клавиш?

Попробовал читать из /dev/console - не получается, клавиатура вообще начинает постоянно что-то выдавать, даже когда мышкой закрываю программу. Приходится перезагружать компьютер.

vasirck
()

Настройка терминала

У меня есть некий терминал ttyN. Только ведет он себя несколько странно. Я пытаюсь из него читать. Когда на внешнем устройстве, подключенном к этому терминалу а нажимаю кнопочки, ничего не происходит. Когда нажимаю "ввод" читается сразу вся строка. Еще у этого терминала есть вывод. Когда я нажимаю кнопочки на внешнем устройстве, эти кнопочки тут же выводятся в вывод.

Можно ли настроить терминал, чтобы ввод производился посимвольно, а не построчно? Можно ли отключить эхо?

Сейчас читаю TTY_IOCTL Section: Linux Programmer's Manual (4), но я пока не понял как это делать. Флагов много, а описания краткие - непонятно

vasirck
()

RSS подписка на новые темы