os标准包,是一个比较重要的包,顾名思义,主要是在服务器上进行系统的基本操作,如文件操作,目录操作,执行命令,信号与中断,进程,系统状态等等。在os包下,有exec,signal,user三个子包。

启动外部命令和程序

在os包中,有很多有趣的功能,比如可以通过变量Args来获取命令参数,os.Args返回一个字符串数组。fmt.Println(os.Args)

在os包中,相关函数名字和作用有较重的Unix风,比如:funcChdir(dirstring)error//chdir将当前工作目录更改为dir目录

funcGetwd()(dirstring,errerror)//获取当前目录

funcChmod(namestring,modeFileMode)error//更改文件的权限

funcChown(namestring,uid,gidint)error//更改文件拥有者owner

funcChtimes(namestring,atimetime.Time,mtimetime.Time)errorfuncClearenv()//清除所有环境变量(慎用)

funcEnviron()[]string//返回所有环境变量

funcExit(codeint)//系统退出,并返回code,其中0表示执行成功并退出,非0表示错误并退出

在os包中,有关文件的处理也有很多方法,如:funcCreate(namestring)(fileFile,errerror)//Create采用模式0666创建一个名为name的文件,如果文件已存在会截断它(为空文件)

funcOpen(namestring)(fileFile,errerror)//Open打开一个文件用于读取。

func(fFile)Stat()(fiFileInfo,errerror)//Stat返回描述文件f的FileInfo类型值

func(fFile)Readdir(nint)(fi[]FileInfo,errerror)//Readdir读取目录f的内容,返回一个有n个成员的[]FileInfo

func(fFile)Read(b[]byte)(nint,errerror)//Read方法从f中读取最多len(b)字节数据并写入b

func(fFile)WriteString(sstring)(retint,errerror)//向文件中写入字符串

func(fFile)Sync()(errerror)//Sync递交文件的当前内容进行稳定的存储。

func(fFile)Close()error//Close关闭文件f

有关文件的处理,将在《Go语言文件处理》一章中详细说明。

在os包中有一个StartProcess函数可以调用或启动外部系统命令和二进制可执行文件;它的第一个参数是要运行的进程,第二个参数用来传递选项或参数,第三个参数是含有系统环境基本信息的结构体。

这个函数返回被启动进程的id(pid),或者启动失败返回错误。

packagemainimport("fmt""os")funcmain(){//1)os.StartProcess///*********************//*Linux:*/env:=os.Environ()procAttr:=&os.ProcAttr{Env:env,Files:[]*os.File{os.Stdin,os.Stdout,os.Stderr,},}//1stexample:listfilesPid,err:=os.StartProcess("/bin/ls",[]string{"ls","-l"},procAttr)iferr!=nil{fmt.Printf("Error%vstartingprocess!",err)//os.Exit(1)}fmt.Printf("Theprocessidis%v",pid)}

os/signal信号处理

一个运行良好的程序在退出(正常退出或者强制退出,如ctrl+c,kill等)时是可以执行一段清理代码,将收尾工作做完后再真正退出。一般采用系统Signal来通知系统退出,如killpid。在程序中针对一些系统信号设置了处理函数,当收到信号后,会执行相关清理程序或通知各个子进程做自清理。

Go语言的系统信号处理主要涉及os包、os.signal包以及syscall包。其中最主要的函数是signal包中的Notify函数:funcNotify(cchan

该函数会将进程收到的系统Signal转发给channelc。如果没有传入sig参数,那么Notify会将系统收到的所有信号转发给channelc。

Notify会根据传入的os.Signal,监听对应Signal信号,Notify()方法会将接收到对应os.Signal往一个channelc中发送。

下面代码以syscall.SIGUSR2信息为例,说明了具体实现:

packagemainimport("fmt""os""os/signal""syscall""time")funcmain(){gosignalListen()for{time.Sleep(10*time.Second)}}funcsignalListen(){c:=make(chanos.Signal)signal.Notify(c,syscall.SIGUSR2)for{s:=

go语言os.exit(1)_Go语言os包用法简述相关推荐

  1. go语言os.exit(1)_Go语言-信号os.Interrupt和信号syscall.SIGTERM的应用

    实例 package main import( "fmt" "os" "os/signal" "sync" " ...

  2. go语言开发环境搭建_GO语言开发环境搭建

    go语言支持以下系统 1.Linux 2.FreeBSD 3.Mac OS X(也称为 Darwin) 4.Windows 本文以Linux系统进行展开 安装包下载地址: https://golang ...

  3. go语言支持继承吗_Go语言的结构体嵌入为什么不算继承?

    今日端午节,又是高考.祝大家节日快乐,祝考生考出好成绩,大家开车请勿鸣笛! 面向对象的设计思想,是根据现实世界进行抽象得出的一套理论.既然是现实世界的抽象,继承的本质是有"父子"关 ...

  4. go语言os.exit(1)_在Golang中各种永远阻塞的姿势

    在Golang中各种永远阻塞的姿势 Go的运行时的当前设计,假定程序员自己负责检测何时终止一个goroutine以及何时终止该程序. 可以通过调用os.Exit或从main()函数的返回来以正常方式终 ...

  5. Go语言自学系列 | golang标准库os包和环境相关的方法

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  6. Go语言自学系列 | golang标准库os模块 - 文件目录相关

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,请移步至知乎网站,谢 ...

  7. go var type 互转_Go语言学习笔记(第九章) 结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go 通过类型别名(alias types)和结构体的形式支持用户自定义 ...

  8. C语言 exit 函数 - C语言零基础入门教程

    目录 一.exit 函数简介 二.exit 函数使用 三.exit 函数和 return 区别 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础 ...

  9. sha256算法_Go语言实现Pow共识算法

    作者: 张详,闫思 来源: IDCU PoW呢...Proof of Work ,工作量证明机制,可能这个名字大家不熟悉,说比特币的话,大家就熟悉了.没错,PoW就是比特币所使用的共识机制. 通过计算 ...

最新文章

  1. 机器学习神器Scikit-Learn保姆教程!
  2. jQuery Mobile发展新闻阅读器,适应iphone和android打电话
  3. 如何从命令行重新加载.bash_profile?
  4. WKWebView之cookie请求
  5. 【收藏】快速排查无线AP故障的十种方法
  6. Scala 学习笔记(2)
  7. 深度学习网络backbone?head、neck、bottleneck、GAP、Embedding、pretext task、downstream task、temperature parameter
  8. 【小白学习C++ 教程】十三、C++命名空间namespace
  9. mysql2012用户名_SQL Server 登录名、服务器角色、用户名和数据库角色 --- 解释
  10. python编程(你的电脑能够执行多少线程和进程)
  11. 解决远程连接mysql很慢的方法
  12. 老鸟的Python新手教程
  13. 互联网晚报 | 11月10日 星期三 | 华为捐赠欧拉开源操作系统;微信支持导出个人信息;12306上线铁水联运服务...
  14. 前端别再错过2022的金三银四了。。
  15. Vue+ .netcore3.1 模拟QQ邮箱发送验证码
  16. matlab对于处理数字图像的优点,学习MATLAB数字图像处理经验谈
  17. 1.1机器学习和深度学习综述(百度架构师手把手带你零基础实践深度学习原版笔记系列)
  18. stm32 + RN8209C单相计量芯片使用心得
  19. 面试自我介绍范文(30篇)
  20. HTML 怎么取消文本框的输入时的边框?

热门文章

  1. 【Kafka】kafka NotLeaderForPartitionException thisserver is not the leader for topic-partition
  2. JVM :执行jinfo命令报错Can't attach symbolicator to the process
  3. java : NoSuchMethodError: org.codehaus.jackson.JsonNode.asInt()
  4. Netty : 臭名昭著的JDK的NIO bug(空轮询bug)
  5. 【Hbase】命令行load数据文件到Hbase
  6. 面试前准备这些,成功率会大大提升!(Java篇)
  7. 某厂面试归来,发现自己落伍了!
  8. mysql数据库数字类型_Mysql 数据库数值类型详解
  9. Docker上安装运行Hbase
  10. Mybatis-plus的相关文章