golang fork 系统资源共享可行性验证
来源:互联网 发布:mac手机铃声 编辑:程序博客网 时间:2024/06/05 15:48
环境:linux gcc go gdb
如左边代码:
go buildtest.go
./test s
./test c
./test c
可见2个.dat日志文件都有输出,说明2个父子进程都有accept成功,进一步说明fork 在golang里面可用,也验证了操作系统的父子进程资源可共享
packagemain
import(
"fmt"
"io"
"net"
"os"
)
/*
#include<unistd.h>
intMyFork()
{
pid_tp =fork();
returnp;
}
*/
import"C"
funchandlerCli(cli net.Conn){
for{
buf:= make([]byte,128)
l,err:= cli.Read(buf)
iferr != nil {
fmt.Println("cli.Readerr")
}else {
buf= buf[:l]
ret,e:= cli.Write(buf)
ife != nil ||ret != l {
fmt.Println("cli.Writeerr")
}
}
}
}
funcmain() {
varpid C.int = C.MyFork()
ifpid != 0 {
os.Exit(0)
}
ifos.Args[1] == "s" {
serv,serr:= net.Listen("tcp4", "127.0.0.1:8082")
ifserr != nil {
fmt.Println("listenerr")
}
iftrue {
C.MyFork()
}
fW,_:= os.OpenFile(fmt.Sprintf("%d.dat", os.Getpid()),os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
deferfW.Close()
varclinum int64= 0
for{
cli,cerr:= serv.Accept()
ifcerr != nil {
fmt.Println("accepterr")
io.WriteString(fW,"accept err")
continue
}
gohandlerCli(cli)
clinum++
//ifclinum%100 == 0{
//fmt.Println(os.Getpid(),":",clinum)
io.WriteString(fW,fmt.Sprintf("%d", clinum))
//}
}
}else {
cli,err:= net.Dial("tcp4", "127.0.0.1:8082")
iferr != nil {
fmt.Print(err)
return
}
buf:= make([]byte,3)
buf[0]= 'a'
buf[1]= 'b'
buf[2]= 'c'
for{
ret,ew:= cli.Write(buf)
ifew != nil {
fmt.Println(ew)
continue
}
ifret != 3 {
fmt.Println("writeless 3")
}
red,errr:= cli.Read(buf)
ifred != 3 {
fmt.Println("readless 3")
}
iferrr != nil {
fmt.Println(errr)
}
}
}
return
}
- golang fork 系统资源共享可行性验证
- fork父子进程共享
- fork()----父子进程共享
- Linux下的常见系统资源共享
- Linux下的常见系统资源共享
- Linux下的常见系统资源共享
- loadrunner监控linux系统资源与大家共享
- 通过GPS测试跑步速度可行性验证
- 通过GPS测试跑步速度可行性验证
- golang 图片验证码
- Golang常用正则验证
- golang的参数验证
- 系统资源
- 系统资源
- 系统资源
- fork mmap 共享映射区
- fork的数据是否共享
- golang(beego)验证码控制器
- C# 第14章 上机3,4,5
- Fizz Buzz 问题
- 海洋模拟
- Mysql多实例安装+主从复制+读写分离 -学习笔记
- mysql解压缩启动问题
- golang fork 系统资源共享可行性验证
- 对测试人员或开发人员来说相互沟通有多重要?
- leetcode-300-Longest Increasing Subsequence 动态规划
- JQuery在XSS攻击中的表现
- 算法练习题——坐出租车
- nginx负载均衡搭建
- 001 Gradle For Android Training
- FlipGame循环解法(此方法未能体现bfs精髓,有冗余之处)
- MemoryStream