fork

How to list first level directories only in C?

最后都变了- 提交于 2020-01-10 05:16:10
问题 In a terminal I can call ls -d */ . Now I want a c program to do that for me, like this: #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <unistd.h> int main( void ) { int status; char *args[] = { "/bin/ls", "-l", NULL }; if ( fork() == 0 ) execv( args[0], args ); else wait( &status ); return 0; } This will ls -l everything. However, when I am trying: char *args[] = { "/bin/ls", "-d", "*/", NULL }; I will get a runtime error: ls: */: No such file or directory 回答1:

哲学家进餐问题

好久不见. 提交于 2020-01-10 00:32:51
参考:https://blog.csdn.net/fuziwang/article/details/79809994 1.问题描述: 哲学家进餐问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。 约束条件 (1)只有拿到两只筷子时,哲学家才能吃饭。 (2)如果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。 (3)任一哲学家在自己未拿到两只筷子吃完饭前,不会放下手中已经拿到的筷子。 2.求解方法 (1).信号量的设置 放在桌子上的筷子是临界资源,在一段时间内 只允许一位哲学家 使用,为了实现对筷子的互斥访问,可以用一个信号量表示筷子,由这 五个信号量构成信号量数组 。 semaphore chopstick[5] = {1,1,1,1,1}; while(true) { /*当哲学家饥饿时,总是先拿左边的筷子,再拿右边的筷子*/ wait(chopstick[i]); wait(chopstick[(i+1)%5]); // 吃饭 /*当哲学家进餐完成后,总是先放下左边的筷子,再放下右边的筷子*/ signal(chopstick[i]); signal

How to inherit stdin and stdout in python by using os.execv()

前提是你 提交于 2020-01-09 11:45:35
问题 First, I wrote a c++ code as follows: #include <cstdio> int main() { int a,b; while(scanf("%d %d",&a,&b) == 2) printf("%d\n",a+b); return 0; } I use g++ -o a a.cpp to complie it. Afterwards, I wrote python code as follows: import os,sys sys.stdin = open("./data.in","r") sys.stdout = open("./data.out","w") pid = os.fork() if pid == 0: cmd = ["./a","./a"] os.execv(cmd[0],cmd) However, the data.out file contains nothing. That is to say, the child process did not inherit stdin and stdout from his

【Git入门之十五】Github操作指南

一曲冷凌霜 提交于 2020-01-08 20:01:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最终篇,介绍一下Github网站的使用,主要是翻译为主,简化了已介绍过的内容。 1.如何创建一个仓库? 1.1.点击New Repository。 1.2.填写仓库信息,点击Create Repository。 1.3.创建一个README文件。 这步就不说了,在本地创建,然后push到远程仓库中。 2.如何Fork一个仓库 2.1.贡献一个项目 有时候你可能会发现你想要为某人的项目做贡献,或者你希望在别人项目基础上开始你的项目。这就是“Forking”。 2.1.1.Fork仓库 点击仓库的fork按钮。 2.1.2.克隆你的fork 你成功的fork了你需要的仓库,但是它仅仅存在于github上,把它克隆到本地吧! 怎么克隆一个远程仓库到本地,请看: http://blog.csdn.net/jackystudio/article/details/12131317 2.2.你还能做什么? 2.2.1.推送提交 推送你的提交到你fork的项目。 2.2.2.获取更新 如果你fork的项目有了更新,你可以获取到最新的更新。 2.2.3.创建分支 你可以创建一个分支,做你想要的改变。这样既方便又无风险。 2.2.4.Pull Request 如果你想对源项目做出贡献,那么你需要给原作者发出一个Pull

如何直接在github网站上更新你fork的repo?

故事扮演 提交于 2020-01-08 19:54:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 玩过github的人一定会在你自己的账号上fork了一些github开源项目。这些开源项目往往更新比较活跃,你今天fork用到你自己的项目中去了,过几个星期这个fork的origin可能有一些bugfix了,你怎么办呢?当然直接到Origin repo中去clone是一个方法,但是github的public repo有可能过一段时间就被作者删除了,你是否希望在origin即使已经被删除的情况下,你的账号下依然有你钟情的repo? 解决上面的问题,最好的方法就是不定时地将origin的commit sync到你自己的fork repo中,一方面能够保持鲜活,另一方面有备无患。那么如何sync呢?又有几种方案,一种是你直接在本地clone的repo中,pull upstrame,做好merge,随后push到你自己的fork repo中。另外还有一种更加简便聪明的方法:只需在github网站上点几个鼠标,不用本地开发环境轻松搞定: 1.打开你的github fork repo; 2.点击Pull request; 3.点击new pull request.默认情况下,github会比较original/your fork,这时应该不会有任何输出,因为你并没有做过任何变更; 4.点击switching the

怎么让自己的fork与author同步

冷暖自知 提交于 2020-01-08 19:54:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 问: I have forked a github project, then cloned it locally. I then made some changes in a new branch on my_github/the_project repo. I then added and committed the changes and pushed to my github repo and submitted a pull request. The owner has received my request and would like me to "rebase onto master" to get the latest changes. How do I do this? Initially I thought I could just git fetch and rebase master from within my current branch (as most posts I found advise...), but git fetch didn't do anything. Now I've realized that it is presumably because I'm

如何从forked repo更新pull请求?

最后都变了- 提交于 2020-01-08 19:52:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 所以我首先分叉了一个回购,然后提交了一个分叉的回购。 然后我打开了拉取请求。 pull请求列出了我想要的所有更改。 在审核了我的拉取请求之后,回购所有者希望我在接受之前做出一些更改。 我已经在我的fork中进行了这些更改,现在如何使用这些更改更新pull请求(或者这不是我应该如何处理它)? #1楼 如果 在Windows上 使用 GitHub : 在本地进行更改。 打开GitHub,切换到本地存储库,双击存储库。 将分支(靠近窗口顶部)切换到您从中创建拉取请求的分支(即比较的fork侧的分支) 应该看到右边输入提交注释的选项,并提交对本地仓库的更改。 单击顶部的同步,除其他外,将您的提交从本地推送到GitHub上的远程分支。 拉取请求将通过附加提交自动更新。 这是因为pull请求表示fork分支的diff。 如果您转到拉取请求页面(您和其他人可以对您的拉取请求发表评论的页面),则“提交”选项卡应该包含您的其他提交。 这就是为什么在开始更改自己的更改之前,应该为计划放入拉取请求的每组更改创建一个分支。 这样,一旦你发出了拉取请求,你就可以创建另一个分支并继续处理其他任务/功能/ bug修复,而不会影响之前的拉取请求。 #2楼 在GitHub中更新pull请求就像将所需的更改提交到现有分支(与pull请求一起使用

让程序员泪流满面的 11 个 Git 面试题,到底有多难?

三世轮回 提交于 2020-01-08 16:12:09
在今年的 Stack Overflow 开发者调查报告中,超过 70% 的开发者使用 Git,使其成为世界上使用人数最多的版本控制系统。Git 通常用于开源和商业软件开发,对个人、团队和企业都颇有益处。 Q1: 什么是 Git 复刻(fork)?复刻(fork)、分支(branch)和克隆(clone)之间有什么区别? 主题:Git 难度:⭐⭐ 复刻(fork) 是对存储仓库(repository)进行的远程的、服务器端的拷贝,从源头上就有所区别。复刻实际上不是 Git 的范畴。它更像是个政治/社会概念。 克隆(clone) 不是复刻,克隆是个对某个远程仓库的本地拷贝。克隆时,实际上是拷贝整个源存储仓库,包括所有历史记录和分支。 分支(branch) 是一种机制,用于处理单一存储仓库中的变更,并最终目的是用于与其他部分代码合并。 Q2: “拉取请求(pull request)”和“分支(branch)”之间有什么区别? 主题:Git 难度:⭐⭐ 分支(branch) 是代码的一个独立版本。 拉取请求(pull request) 是当有人用仓库,建立了自己的分支,做了些修改并合并到该分支(把自己修改应用到别人的代码仓库) Q3: “git pull”和“git fetch”之间有什么区别? 主题:Git 难度:⭐⭐ 简单来说,git pull 是 git fetch + git

linux C进程

心已入冬 提交于 2020-01-08 02:41:23
一个进程控制块,大体分下列三个内容: 进程描述信息 进程运行状态/调度信息 进程资源信息(进程所在存储器的地址信息,文件系统以及打开的文件信息) cpu现场信息;中断后保存寄存器信息和堆栈信息,以便下次回到断点后可以继续执行 进程通过fork()函数产生,其返回一个整型的进程号,在一段代码体中,通常以pid的值(>0主进程,==0子进程,-1进程创建失败)来区分主进程和子进程的行为 #include<stdio.h> #include<stdlib.h> #include<unistd.h> void main() { pid_t pid; pid=fork(); if(pid==0) {      //用于定义子进程的逻辑 printf("pid==%d this is a child process of %d \n",getpid(),getppid()); } if(pid==-1) { printf("process created failed!\n"); } if(pid>0)//用于定义父进程的逻辑 { printf("%d: a master process working!---%d\n",getpid(),getppid()); } } 输出结果: 根据这一原理可以循环创建进程----比如循环六次,但规定只让父进程来创建进程,以避免进程的创建出现指数级增长

git使用记录

早过忘川 提交于 2020-01-07 14:10:31
常用的git命令 https://git-scm.com/book/zh/v2 最完整的git指南 https://www.cnblogs.com/liluxiang/p/9474925.html https://blog.csdn.net/u010632125/article/details/79620235 https://blog.csdn.net/weixin_33127753/article/details/88870257 git在线实践 中文游戏教程 https://learngitbranching.js.org/?demo 英文版 http://try.github.io/ 以下是整个操作git仓库的流程 进入工程目录后,初始化仓库 git init 初始化后查看仓库状态 git status 会提示没有可提交的内容 这个命令在任何时候都可以使用 在当前仓库建立一个markdown文件 touch README.md #创建文件 git status 只是在当前工作目录【工作树】创建了文件,该文件还不是git的版本管理对象,所以使用git status查看状态时,会提示存在未打包文件 git add 把文件加入到暂存区stage或index,这个文件就成了git的管理对象;暂存区是提交之前的一个临时区域 git add README.md # 文件加入到暂存区