我为什么反对把Enter作为发送快捷键
微信,QQ,飞书,钉钉等常用社交软件电脑版默认会把Enter设置为“发送”快捷键,我是很反对的。上个月有同事在群里问如何获取一个转瞬即逝的进程的全路径,显然查/proc/$pid/cmdline的话怕是手速不够快,由于迄至5.x版本的Linux内核API已经足够丰富,以至于已经天然支持了获取全路径的API,即 get_cmdline 。我快速在我自己的虚拟机里进行尝试:#!/usr/bin/sta
微信,QQ,飞书,钉钉等常用社交软件电脑版默认会把Enter设置为“发送”快捷键,我是很反对的。
上个月有同事在群里问如何获取一个转瞬即逝的进程的全路径,显然查/proc/$pid/cmdline的话怕是手速不够快,由于迄至5.x版本的Linux内核API已经足够丰富,以至于已经天然支持了获取全路径的API,即 get_cmdline 。
我快速在我自己的虚拟机里进行尝试:
#!/usr/bin/stap -g
%{
#include <linux/skbuff.h>
#include <linux/tcp.h>
#include <linux/mm.h>
#include <net/tcp.h>
int (*ptr)(struct task_struct *task, char *buffer, int buflen);
%}
function dump(skk:long)
%{
struct sock *sk = (struct sock *)STAP_ARG_skk;
struct tcp_sock *tp = tcp_sk(sk);
struct inet_sock *inet = inet_sk(sk);
struct task_struct *curr = current;
char buf[128];
ptr = (void *)0xffffffffb6802d90;
if (ntohs(inet->inet_dport) == 80) {
ptr(curr, buf, 128);
STAP_PRINTF("%s %s %d\n", curr->comm, buf, curr->pid);
}
%}
probe kernel.function("tcp_connect")
{
dump($sk);
}
其中0xffffffffb6802d90这个地址是我在/proc/kallsyms里查到的。
上面的脚本完美打印出了全路径,我迫不及待得将这个发到群里,希望能够提供帮助。于是我复制粘贴了上面的脚本,一个Enter拍下去就发出了,后面我紧接着准备发送一句提示:
0xffffffffb6802d90这个地址你自己从/proc/kallsyms里找,就是get_cmdline的地址。cat /proc/kallsyms |grep get_cmdline 获取。
然而还没等我这句话发出,上面脚本已经被执行,机器已经panic了…这一切都怪Enter键。
换句话说, Enter键作为发送快捷键让人们聊天的内容大部分都不再具有原子性。 为了用Enter发送消息,有时候发送多段消息又怕不小心敲下Enter的时候,你不得不做类似的事情:
请注意,我下面的消息可能会分段发出,只有看到“发完了”的时候,才表示我发完了。。。或者就是如果我还没有发完,我就必须在每条消息后,Enter键拍下前加一句“我还没说完”。。。
而Enter键是很容易误碰的。对于程序员而言,除了空格之外的第二吧。
将Enter键作为默认的发送快捷键只能让消息发送更快更便捷,却很容易带来误解,有时候你话说一半就不小心发出去了。
这种问题在音视频通信中很常见,比如打电话,句子是一句一句断句的,你总不能每次都加一句我还没说完吧。所以一般重要场合,音频通话是要加锁的,比如一些军事行动,说话必须听到“完毕”才能整体理解,否则就接着听。
…
最后给一个有用的代码,获取绝对路径最简单的方法:
// curr 就是 current ,也就是一个task_struct
name = kstrdup_quotable_file(curr->mm->exe_file, GFP_KERNEL);
浙江温州皮鞋湿,下雨进水不会胖。
更多推荐
所有评论(0)