小编典典

使用write,只有两种情况需要考虑:

如果失败,则结果为-1并被errno设置。

如果成功,则结果为0或更大errno且未设置。

除非您对历史上的Unix实现感兴趣,否则没有其他情况可以考虑。

write可能返回0 的原因是因为输入缓冲区可能为空。

然而,C的手册页write呼叫大致介绍了errno 可能 ,如果我们写零长度的缓冲区没有解释任何细节也可以设置,但不确定。

所有这一切意味着0长度写入可能会失败。如果失败,则返回-1并设置errno。如果成功,则返回0且不设置errno。手册页中刚刚提到了这与其他任何写入操作相同的行为,因为人们可能会惊讶地发现0长度写入可能会失败。

errno如果write针对文件,非阻塞套接字或阻塞套接字的调用返回0 的状态是什么?

在这种情况下,errno未设置,因为write没有失败。仅当输入缓冲区为零字节时才会发生这种情况。

什么时候以及如何write调用返回0而errno不是0?

这不会发生。errno设置要么返回值为-1,要么errno未设置返回值为0或更大。

errnoif write通话返回正数的状态如何?会否定的?

该errno值将不会被设置。它的值将与write调用前相同。

还有其他系统调用可能会遇到相同的情况吗?

通常,系统调用将返回错误 或 成功。他们不会两者兼而有之。查看其他手册页的“返回值”部分,您将发现它们与大致相同write。

此代码是安全的。

func writeAll(fd int, buffer []byte) bool {

length := len(buffer)

for length > 0 {

written, err := syscall.Write(fd, buffer)

if err != nil { // here

return false

}

length -= written

buffer = buffer[written:]

}

return true

}

请注意,这有点多余,我们可以这样做:

func writeAll(fd int, buf []byte) bool {

for len(buf) > 0 {

n, err := syscall.Write(fd, buf)

if err != nil {

return false

}

buf = buf[n:]

}

return true

}

关于C的注释

从技术上讲,write它既是系统调用又是C函数(至少在许多系统上)。但是,C函数只是一个调用系统调用的存根。Go不会调用此存根,而是直接调用系统调用,这意味着此处不涉及C(嗯,直到您进入内核为止)。

手册页显示了C存根的调用约定和行为write。Go选择将其行为复制到自己的存根中syscall.Write。实际的系统调用本身仅具有汇编语言界面。

2020-07-02

c语言syscall函数,C写调用和Go syscall.Write之间的区别相关推荐

  1. 求222222c语言递归函数,C语言ch函数的嵌套调用和递归调用.pptx

    C语言ch函数的嵌套调用和递归调用.pptx 2012/10/221 上一节我们学到了 n函数的定义 n形参 n函数的声明 n函数的调用 n实参 n函数的调用过程 n局部变量(包括形参)何时分配内容. ...

  2. 在c语言中允许函数递归调用,c语言允许函数的递归调用吗

    c语言允许函数的递归调用吗 允许.C语言中的函数直接或间接调用自己的过程叫递归. 一.递归的两个必要条件 1.存在限制条件,当满足这个条件时,递归便不再继续. 2.每次递归调用之后越来越接近这个限制条 ...

  3. C语言丨函数的递归调用和递归函数

    目录 前言 一.从阶乘引入 二.递归模板 1.递归函数模板 2.举例分析 三.从数学归纳法理解递归 四.更多递归实例 1.用递归方法编程计算Fibonacci数列 题目分析 程序 2.汉诺塔(Hano ...

  4. C语言用函数指针变量调用函数

    一.用函数指针变量调用函数 一个函数,在编译的时候 ,系统会给这个函数分配一个入口地址,这个入口地址就称为函数的指针(地址).既然有地址,那么我们可以定义一个指针变量指向该函数,然后,我们就可以通过该 ...

  5. c语言复习--函数的递归调用

    当一个程序自己调用自己时,就形成了递归现象.(可参照数学中阶乘的运算,每一步都需要前一步的值) 函数A直接调用函数A为直接递归,函数A调用函数B,函数B又调用函数A,称为间接递归. 写递归程序的关键在 ...

  6. C语言:函数的递归调用

    函数的递归调用:一个函数在它的函数体内,直接或者间接地调用了他本身. 直接递归调用:函数直接调用自身.                              间接递归调用:函数间接调用自身. 如下 ...

  7. 【C语言】函数嵌套的调用 函数递归调用

    一.两种函数调用的方法. 1.可以嵌套调用函数在调用一个函数的过程中,又调用另一个函数.       例:add(add(a,b),c); 2.可以在函数的定义中调用另一个函数. //加函数 int ...

  8. matlab调用c语言驱动函数,[转载]Matlab调用C语言函数

    3.3000 要得出以上的结果,那应该怎样做呢? 解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matlab的内置函数一样方便.MEX文件是由原C代码加上MEX文件专用的接口函数后 ...

  9. c语言子函数定义与调用,C语言的简单函数定义与调用

    #include int main() { void print_star();//声明print_star函数 print_star();//调用print_star函数 void print_me ...

最新文章

  1. Linux 启动失败 磁盘阵列,组建RAID5重启系统,出现md127的解决办法
  2. 力扣——206.反转链表
  3. ubuntu安装mysql_如何在Ubuntu14.04中安装mysql
  4. 百度AI语音语义一体化技术 识别的同时进行语义分析
  5. 递归问题学习二之卡牌组合问题
  6. linux+多个字符分割字符串数组中,怎样通过特定的分隔符将字符串分割成数组
  7. avl cruise与matlab,AVL CRUISE下载,AVL CRUISE购买,AVL CRUISE试用,AVL CRUISE介绍,AVL CRUISE评价...
  8. WinRAR软件注册的方法介绍
  9. sequel pro 格式化sql
  10. java 视频比特率_java – 为MediaCodec设置的有效比特率是多少
  11. SpringBoot整合银联支付
  12. OneR算法的Python简单实现
  13. 图像处理/计算机视觉/python环境下如何用滤波器、算法恢复图片,对图片去污【附代码】
  14. Java| MANIFEST.MF讲解
  15. Android--CoordinatorLayout源码分析及NestedScrolling机制
  16. 阿里云ECS每天一件事D1:配置SSH
  17. 从科学的开放精神来看开源
  18. python列表自定义顺序排序
  19. FX3U PLC源代码,stm32芯片。 全套硬件,软件源码,可以直接用GX Works2编程直接写入。 带读保护版本
  20. nvm 下载安装及相关命令

热门文章

  1. sqlserver数据库练习5
  2. Java包装类的拆箱和装箱是怎么回事?
  3. 2022年辽宁最新建筑八大员(电气)模拟考试题库及答案
  4. java启动参数dp,java – Intermec打印机中的DP命令问题
  5. STM32普通IO脚中断过程
  6. java开发flash游戏_FLASH+JAVA开发实时网络游戏
  7. 2022年加氢工艺考试题库模拟考试平台操作
  8. H电-Problem Archive-4520-小Q系列故事——最佳裁判
  9. 把Linux放进软盘里zz
  10. ?Winxp + Vista + Mac OSX + Ubuntu