我有一个小型服务器程序,它接受TCP或本地UNIX套接字上的连接,读取一个简单的命令,并根据命令发送一个回复.问题是客户端有时可能对答案没兴趣并且提前退出,因此写入该套接字将导致SIGPIPE并使我的服务器崩溃.什么是防止崩溃的最佳做法?有没有办法检查线的另一边是否还在读?(select()似乎在这里不起作用,因为它总是说套接字是可写的).或者我应该用处理程序捕获SIGPIPE并忽略它?
我们都听过一个人应该重订,从未发表的作品,它的危险,等等.但是,我还没有看到张贴如何处理的情况下衍合情况的任何食谱被出版.
现在,请注意,只有存储库仅由已知(并且最好是很小)的人群克隆,这才真正可行,这样无论谁推送rebase或重置,都可以通知其他人他们下次需要注意的时候取(!).
如果你没有本地提交foo并且它被重新定位,我看到的一个明显的解决方案将起作用:
git fetch
git checkout foo
git reset --hard origin/foo
Run Code Online (Sandbox Code Playgroud)
foo根据远程存储库,这将简单地抛弃本地状态以支持其历史记录.
但是,如果一个人在该分支机构进行了大量的本地更改,那么如何处理这种情况呢?
我认为它允许将更改从一个分支移动到下一个分支,但这是樱桃选择的目的,如果您没有提交更改,也许您不应该移动它们?
我偶尔会在错误的分支上应用错误的存储,这让我对这个问题感到疑惑.
我正在阅读Effective Perl Programming(第2版).我遇到过一段被描述为写得不好的代码,但我还不了解它的内容是什么,或者它应该如何改进.如果有人可以向我解释这件事,那就太棒了.
这是有问题的代码:
sub sum_values_per_key {
my ( $class, $dsn, $user, $password, $parameters ) = @_;
my %results;
my $dbh =
DBI->connect( $dsn, $user, $password, $parameters );
my $sth = $dbh->prepare(
'select key, calculate(value) from my_table');
$sth->execute();
# ... fill %results ...
$sth->finish();
$dbh->disconnect();
return \%results;
}
Run Code Online (Sandbox Code Playgroud)
该示例来自测试代码的章节(第324/325页).让我想知道如何改进代码的句子如下:
由于代码写得很差并直接访问DBI,因此您必须创建一个假的DBI对象来代替真实的东西.
我可能还没有理解这本书迄今为止试图教给我的很多东西,或者我已经跳过了相关部分以了解上述代码的不良做法......好了,先谢谢你的帮助!
我有一个字符串,开始//#...上升到换行符.我已经找到了正则表达式,这就是这个..#([^\n]*).
我的问题是如果以下条件匹配,如何从文件中删除此行
如果由于某些奇迹在我们的程序中发生了段错误,我想要捕获SIGSEGV并让用户(可能是GUI客户端)知道一个返回码,发生了严重的问题.同时我想在命令行上显示信息以显示捕获的信号.
今天我们的信号处理程序如下:
void catchSignal (int reason) {
std :: cerr << "Caught a signal: " << reason << std::endl;
exit (1);
}
Run Code Online (Sandbox Code Playgroud)
我可以听到上面的恐怖尖叫声,正如我从这个帖子中读到的那样,从信号处理程序中调用一个不可重入的函数是邪恶的.
是否有便携式方式处理信号并向用户提供信息?
编辑:或至少在POSIX框架内可移植?
c ×2
git ×2
perl ×2
signals ×2
broken-pipe ×1
c++ ×1
coding-style ×1
dbi ×1
git-rebase ×1
git-reset ×1
git-stash ×1
io ×1
posix ×1
rebase ×1
reentrancy ×1
regex ×1
sigpipe ×1
unit-testing ×1