功能:

     向文件中写入数据

头文件:

     #include  <unistd.h>

原型:

     ssize_t

write(int fd, const void *buf, size_t count);

参数:

     fd:         文件描述符buf:      存放要写入的数据的缓冲区首地址count:   想要写入的字节数

返回值:

     >=0:成功写入的字节数,0表示什么都没写入-1:   写入失败,并设置全局变量errno

例:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <strings.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int main(int argc, char *argv[])
{
if(argc < 2) {
fprintf(stderr,“Usage: %s \n”, argv[0]);
return -1;
}
int fd = 0;
if (0 > (fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0666)))
{
perror(“open”);
return -1;
}
char buf[100] = “hello world!”;
int ret;
if (strlen(buf) != write(fd, buf, strlen(buf)))
{
perror(“write”);
return-1;
}
printf(“Write file successfully!\n”);
close(fd);
return0;
}

注意:write第三个参数表示想要写入的字节数,返回值表示实际写入的字节数,-1表示出错。如果要查看真正写入的字节数需要看返回值。比如套接字文件或者管道文件,有时候不能一次性把整个buf全部写入文件,此时需要循环写入。

例:

ssize_t mywrite(int fd, const void *buf, size_t count)
{
ssize_t size = 0;
int ret = 0;
while (size < count)
{
ret = write(fd, buf+size, count-size);
size += ret;
}
return size;
}

上述函数mywrite的功能是保证能够成功写入count字节,mywrite的参数与write函数一样。size表示已经写入的字节数,当成功写入的字节数小于想要写入的字节数时,循环往文件中写,从buf偏移size处开始把剩下的内容写入文件,直到size等于count跳出循环。

当写入的文件时套接字或者管道文件时,有一个发送缓冲区,如果缓冲区已满,此时发送阻塞,这就是写阻塞。如果设置为非阻塞模式O_NONBLOCK,缓冲区写满后,返回-1,错误原因Resource temporarily unavailable。

当写入的文件时套接字或者管道文件时,
如果读端关闭,写端还在向对端写入数据时,此时会产生管道破裂信号SIGPIPE,导致程序终止。如果写进程没有报任何错误就结束,很有可能就是管道破裂造成,可以使用signal函数去捕捉该信号,判断错误原因

例: signal(SIGNAL, handler);

Linux中write函数相关推荐

  1. linux中probe函数传递参数的寻找(下)

    点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...

  2. linux中 probe函数的何时调用的?

    点击打开链接 linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名字匹配,BUS就会调用驱动的probe函数,但是有时我们要看看probe函数里面到底做了什么,还有传递给p ...

  3. 每天学一点儿shell:linux中时间函数的date的用法

    文章目录 1.linux中date函数格式 2.date日期函数的具体用法 2.1.获取相应格式的日期 2.2.获取相隔时间段的日期 2.2.1.获取今天的日期 2.2.2.获取昨天的日期 2.2.3 ...

  4. linux中request_region()函数的分析

    linux中request_region()函数的分析 struct resource ioport_resource = { .name = "PCI IO", .start = ...

  5. linux内核sock_sendmsg,为什么linux中sendto函数中的msg.msg_iovlen=1;

    为什么linux中sendto函数中的msg.msg_iovlen=1; | 内核中定义的sys_sendto的源码吗? 这个属于sendmsg中struct msghdr的用法问题, sys_sen ...

  6. Linux中pthread_create函数的实现

    转:http://blog.sina.com.cn/s/blog_6abf2c040101fpca.html 原文地址:[原]Linux中pthread_create函数的实现作者:jiq408694 ...

  7. Linux中popen函数的作用小结

    概述 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这篇文章重点给大家介绍Linux中popen函数的作用,感兴趣的朋友一起看看吧 p ...

  8. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  9. linux 内核 fget,fgets函数 linux中fgets函数怎么用

    一个函数该如何使用?我们最先要了解的就是这个函数的语法以及具体的含义是什么,所以今天我们就来看一看fgets函数在实际的运用过程当中是如何使用的,希望能给大家带来一定的帮助. fgets函数--lin ...

  10. linux 中 sigaction 函数详解

    linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...

最新文章

  1. 思谋科技A轮融资超1亿美元 ,成为最年轻“准独角兽”AI企业
  2. KVM基础功能——Cpu配置
  3. 重启IIS报错:IIS 服务或万维网发布服务,或者依赖这 服务可能在启动期间发生错误或者已禁用...
  4. MPMoviePlayerController 电影播放器
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1051:分段函数
  6. 如何计算Java对象所占内存的大小
  7. RAC集群时间同步服务
  8. 二叉查找树之 Java的实现
  9. python shell 方向键不可用
  10. 数据科学家最常用的十种算法(我准备拿这个当成学习参考)
  11. 简单好用的洗鼻子方法?
  12. 11月27日“软件开发模式思考:传统与敏捷 我们在什么位置?”的主题活动成功举办
  13. 计算机网络安全基础复习(第四版)袁津生主编(转载请注明出处---https://www.cnblogs.com/qingl)...
  14. mac 显示及隐藏文件的方法
  15. 软考-高项-论文-信息系统项目的质量管理
  16. 处理100万条数据 python_仅需1秒!搞定100万行数据:超强Python数据分析利器
  17. 彻底删除Win7任务栏通知区域已卸载程序图标
  18. 关键词分析-对同行网站进行全面的分析-免费关键词分析工具
  19. Unity灯光烘焙设置详解
  20. [表格扫描OCR]快速扫描识别并获取表格图片内容[免费]

热门文章

  1. 产品管理,产品策划,产品设计
  2. 【趣题】几堆石子轮流捡,谁捡到最后的石子算输的游戏
  3. 使用SpotBugs 进行代码检查
  4. 计算机管理器用户怎么打开,win10无法使用内置管理员账户打开计算器如何设置...
  5. Python类和包的介绍
  6. 用二代测序数据的reads组装一个基因序列
  7. GraphTrans:Representing Long-Range Context for Graph Neural Networks with Global Attention
  8. 小白入门web前端360必问--Html标签语义化可能最全,越段位之神器;
  9. android按键录制,按键录制(FRep Finger Replayer)
  10. 几个免费的高清图片网站推荐