一段fork小程序说明的问题

前两天翻翻书,有点小体会,先来看看下面一段小代码吧


#include <unistd.h>
#include <stdio.h>
int main()
{
	pid_t pid;
	printf( "begin fork\n") ;//line buffer
	write(STDOUT_FILENO ,"write msg befor fork ,buf after printf\n", sizeof("write msg befor fork ,buf after printf\n")-1 );
	pid = fork();
	if ( pid>0 ){
		printf("i am father,pid=%d\n",getpid);
	}else if ( !pid ){
		printf( "i am child.pid=%d\n",getpid);
	}else   {
		printf( "fork failed.\n" );
	}
	printf( "this is the end,pid=%d\n", getpid() );
	usleep(1000*100);
	return 0;
}

运行结果:


[123@localhost unix]$ gcc test.c 
[123@localhost unix]$ ./a.out 
begin fork
write msg befor fork ,buf after printf
i am father,pid=134513528
this is the end,pid=21127
i am child.pid=134513528
this is the end,pid=21128


[raoliang@localhost unix]$ ./a.out >mytest
[raoliang@localhost unix]$ cat mytest
write msg befor fork ,buf after printf
begin fork
i am father,pid=134513528
this is the end,pid=21141
begin fork
i am child.pid=134513528
this is the end,pid=21142
[raoliang@localhost unix]$ 

注意发上面两个运行结果不同的地方哦

第一个结果只打印一次begin fork,而第二个结果确打印了两次

从上面一小代码能说明下面几个小问题:

1)printf 到终端是行缓冲(标准I/O是有缓冲区的)

2)write没有缓冲(把write中的\n去掉会更明显一些)

3)文件I/O是全缓冲

4)fork 的子进程和父进程了fork之后的公共的部分,但是只有父进程才执行fork 之前的部分

5)fork后,子进程复制了父进程的缓冲区,包括标准缓冲区的内容(这个就是出现上面结果的真正原因)


由上面的第1、2、5条就很容易理解上面的结果了

当输出终端时,printf遇到 换行就直接输出,但是定向的其它的文件的时候,则是全缓冲了,而在清空缓冲前,子进程复制了父进程的缓冲区,所以子进程会再输出一次

OK,就这么多啦

参考:《unix环境高级编程》





### 回答1: greasyfork.org 是一个用户脚本托管网站,提供用户脚本的发布、搜索和安装服务。用户脚本是一种通过浏览器插件添加的小型程序,可以自动化执行一些常见的网页操作,例如自动填写表单、隐藏广告、增强页面功能等。Greasy Fork 支持多种脚本管理插件,例如 Tampermonkey、Greasemonkey 等。 ### 回答2: greasyfork是一个用户脚本托管网站,可以在该网站上找到和分享各种用户脚本。用户脚本是一段可以自动化或自定义浏览器行为的代码,通常用于改进网页使用体验。 greasyfork官网提供了一个方便的平台,让用户能够浏览和下载用户脚本。在官网上,用户可以使用搜索功能查找特定的脚本,也可以通过浏览不同的类别和标签来发现新的有用脚本。每个脚本都有自己的页面,上面会有脚本的介绍、截图和用户评价,这些信息可以帮助用户判断脚本是否适合自己的需求。 用户可以创建一个账户并登录到greasyfork官网,这样就可以将自己编写的脚本上传到网站上共享给其他用户使用。网站还提供了一些社区功能,比如用户可以给其他脚本添加评论和建议,也可以给脚本作者发送私信。这些功能可以促进用户之间的交流和合作。 greasyfork官网的一个优点是它的广泛性和多样性。用户脚本可以被用于不同的浏览器,包括Chrome、Firefox和Edge等。并且,脚本可以用于不同的网站和Web应用程序,可以改善页面加载速度、自动填充表单、更改页面布局等等。 总之,greasyfork官网是一个为用户提供用户脚本的平台,可以在该网站上查找和分享各种有用的脚本,以提升浏览器使用体验和自动化浏览器行为。 ### 回答3: greasyfork官网是一个提供用户脚本(User Scripts)下载和分享的在线平台。用户脚本是一种可自定义网页上行为的脚本程序,可以通过在浏览器中加载并执行来改变网页的显示和行为。 在greasyfork官网上,用户可以浏览和搜索各种类型的用户脚本,包括广告拦截、界面定制、功能增强等。用户可以根据自己的需求选择并安装合适的脚本,以增强浏览器的功能和用户体验。 官网提供了一个用户友好的界面,使用户可以轻松浏览并找到感兴趣的脚本。每个脚本都有详细的描述、用户评价和安装统计等信息,有助于用户选择最适合自己的脚本。 另外,官网还提供了用户脚本的发布和分享功能。用户可以通过官网注册账号,并上传自己编写的脚本,让其他用户下载和使用。这使得官网成为了一个庞大的用户社区,用户之间可以互相学习和分享脚本编写经验。 总体而言,greasyfork官网是一个为用户提供用户脚本下载和分享的平台。它使用户能够自定义浏览器行为,增强浏览器功能,提升浏览体验。同时,官网也促进了用户之间的交流与学习,形成了一个庞大的用户社区。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值