写点什么

ARTS-week-4

用户头像
youngitachi
关注
发布于: 2020 年 06 月 21 日

1. Algorithm

Leetcode 26: https://leetcode.com/problems/remove-duplicates-from-sorted-array/

使用双指针,快指针表示当前待处理的元素序号,慢指针表示结果元素序号,仅当快指针指向元素不重复时,才赋值到慢指针:

int removeDuplicates(int* nums, int numsSize){
if (numsSize == 0) return 0;
int cur = 0;
for (int i = 1; i < numsSize; i++) {
if (nums[cur] == nums[i]) continue;
nums[++cur] = nums[i];
}
return cur + 1;
}



2. Review

学习盛延敏老师的《网络编程实战》,里面布置了期中作业,要求client发送ls、pwd、cd命令,server需要做对应的处理并且回显。因此这其实不仅是需要做一个TCP的client和server端(这个在学习过程中已经写了很多次),而且还需要知道如何运行shell命令。

这次的重点放在如何在c代码里运行shell命令。

主要参考:

  1. https://stackoverflow.com/questions/646241/c-run-a-system-command-and-get-output

  2. https://stackoverflow.com/questions/43749628/how-can-i-implement-cd-command-in-my-own-shell-in-c

简单说明一下,要运行shell命令,需要用到`popen`函数,但是使用这个函数时会发现一个问题,那就是cd命令执行之后,ls和pwd命令会发现路径并没有改变,这其实是因为使用popen函数执行cd命令,仅仅在执行的时候改变了路径,但是在后面命令时,上下文环境其实是没有改变的,因此需要使用`chdir`这个系统调用来实现。整体上实现并不难,不过直接使用chdir命令不能处理`cd -`,`cd ~`这样的命令。



3. Tips

依然是盛延敏老师的《网络编程实战》里的内容,这次学到的是select函数的用法。其实在使用上来讲,select并不难。示例代码:

// 忽略前面新建socket等操作。
fd_set readmask;
fd_set allreads;
FD_ZERO(&allreads); // 给allreads初始化为0
FD_SET(0, &allreads); // 给allreads的第0个位置设置为1,表示监听第0号的io(即stdin)
FD_SET(sockfd, &allreads); // 给allreads的地sockfd个位置设置为1,sockfd则是之前新建的socket的fd,表示监听该socket的io
for (;;) {
readmask = allreads; // 从select函数返回时,产生io的那一项的位置会被清空,故这里需要重新设置
int rc = select(sockfd + 1, &readmask, NULL, NULL, NULL); // 序号为sockfd,从0开始,实际上最多有sockfd + 1个位置
if (FD_ISSET(sockfd, &readmask)) {
// socket有io,处理xxx
}
if (FD_ISSET(0, &readmask)) {
// stdin有输入,处理xxx
}
}



4. Share

分享吴军老师硅谷来信第39封信《一次堪比大屠杀的学术造假》。事情大致讲的是在欧洲,每年都会有“心脏病指南”发给各个心脏病医生,但是里面2011年里,里面有一条“为了预防非心脏手术的病人因手术引起心脏病,建议在术前使用一种防治心脏病的药物β受体阻滞剂”这样的建议,后来被证明是来源的论文有造假,并且和建议相反的是:给非心脏手术的患者在手术前使用β受体阻滞剂,可能使手术期死亡率提高27%。而从2011年指南提出该建议后,到2012年该成果被发现造假,欧洲有76万人在进行了非心脏手术后死亡。以增加27%的死亡率推算,可能有多达16万人都是白白送命的。这的确算得上是屠杀了,甚至是杀人于无形啊。

具有讽刺意味的是,欧洲一些医生没有严格遵循指南的流程,反而无意地救了很多个生命。



于我而言,其实学术造假算不得陌生,也对此深恶痛绝,但是似乎人生总不是那么的简单,就像我们绝对不能假设其他人要么是绝对的善,要么是绝对的恶,要么是绝对的正直,要么是绝对的卑鄙。但当我看到这篇文章的时候,我还是震惊了,是的,不同人之间的同一性质的事情,区别其实可以天差地别。所以,最好的杜绝的办法就是恶小亦不为。

用户头像

youngitachi

关注

还未添加个人签名 2018.08.22 加入

还未添加个人简介

评论

发布
暂无评论
ARTS-week-4