SVC: как получить patch по имеющемуся commit log?
Можно конечно сделать diff на каждый файл, но их там больше 30 шт.
Можно написать скрипт, но если уже есть какой-то способ, то зачем изобретать велосипед.
Можно конечно сделать diff на каждый файл, но их там больше 30 шт.
Можно написать скрипт, но если уже есть какой-то способ, то зачем изобретать велосипед.
Например есть html-файл: <body><TAG 12312937> asldasjld asdl'a;sld asdas;dk;la asdpl[asp qwekopqkwe </TAG></body> Как можно вырезать TAG вместе с содержимым, то есть чтоб осталось только: <body> </body> sed-ом не получается, по-мойму он понимает только то, что в одной строке, а что на несколько разнесено, то не понимает.
Запускаю 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? И как их закрыть?
Разве так нельзя писать?
-----------------------------------------------------------------
#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;
}
-----------------------------------------------------------------
Есть некие утройства на кот стоит linux. Они подключаются к интернету через gprs модем. Хочется управлять устройствами через web-интерфейс. Так как подключение через gprs, то выдается "fake" ip, скрытый за проксей провайдера. Думаю, что решение может быть таким: Написать некий сервер, кот быдет выполняться на комп с норм адресом. При включении устройства оно будет подключаться с серверу, говорить совое имя и не закрывать сокет, а получать по нему http-запросы и по нему же посылать ответы. Сервер будет просто перенаправлять запросы/ответы. Адрес устройства будет выглядеть так: www.сервер.ru/имя_устройства/... Я думаю, что не первый сталкиваюсь с такой проблемой. Может уже есть что-то готовое, чтоб велосипед не изобретать?
#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, то тоже не компилируется.
Из программы надо запустить другую. В связи с этим есть два вопроса.
Вопросы про 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? Насколько я понимаю, вся выделенная память должна автоматически освобождаться при завершении процесса?
Валится то сервер, то клиент с "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); }
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), то получаю только я. Поэтому думаю, что тут что-то с терминалом связано.
В общем-то это не смертельно, но интересно знать отчего такое происходит.
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 - не помогло
wchar_t ch = L'Ъ';
то выдает предупреждение:
warning: character constant too long
А если пишу:
char ch = 'Ъ';
то выдает предупреждение:
warning: multi-character character constant
У меня locale ru_RU.UTF-8, то есть русские символы заменяются последовательностью байтов. Я думаю, что строчка с wchar_t корректная, только gcc ее не так понял. Что делать?
Я так понял, что раскладка клавиатуры находится в файле /etc/X11/xkb/symbols/ru
Где можно взять нормальную? Да, у меня red hat 9.0.
Можно ли настроить терминал, чтобы ввод производился посимвольно, а не построчно? Можно ли отключить эхо?
Сейчас читаю TTY_IOCTL Section: Linux Programmer's Manual (4), но я пока не понял как это делать. Флагов много, а описания краткие - непонятно