Linux中write函数
功能:
向文件中写入数据
头文件:
#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函数相关推荐
- linux中probe函数传递参数的寻找(下)
点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...
- linux中 probe函数的何时调用的?
点击打开链接 linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名字匹配,BUS就会调用驱动的probe函数,但是有时我们要看看probe函数里面到底做了什么,还有传递给p ...
- 每天学一点儿shell:linux中时间函数的date的用法
文章目录 1.linux中date函数格式 2.date日期函数的具体用法 2.1.获取相应格式的日期 2.2.获取相隔时间段的日期 2.2.1.获取今天的日期 2.2.2.获取昨天的日期 2.2.3 ...
- linux中request_region()函数的分析
linux中request_region()函数的分析 struct resource ioport_resource = { .name = "PCI IO", .start = ...
- linux内核sock_sendmsg,为什么linux中sendto函数中的msg.msg_iovlen=1;
为什么linux中sendto函数中的msg.msg_iovlen=1; | 内核中定义的sys_sendto的源码吗? 这个属于sendmsg中struct msghdr的用法问题, sys_sen ...
- Linux中pthread_create函数的实现
转:http://blog.sina.com.cn/s/blog_6abf2c040101fpca.html 原文地址:[原]Linux中pthread_create函数的实现作者:jiq408694 ...
- Linux中popen函数的作用小结
概述 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这篇文章重点给大家介绍Linux中popen函数的作用,感兴趣的朋友一起看看吧 p ...
- Linux中fork()函数详解
Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...
- linux 内核 fget,fgets函数 linux中fgets函数怎么用
一个函数该如何使用?我们最先要了解的就是这个函数的语法以及具体的含义是什么,所以今天我们就来看一看fgets函数在实际的运用过程当中是如何使用的,希望能给大家带来一定的帮助. fgets函数--lin ...
- linux 中 sigaction 函数详解
linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...
最新文章
- 思谋科技A轮融资超1亿美元 ,成为最年轻“准独角兽”AI企业
- KVM基础功能——Cpu配置
- 重启IIS报错:IIS 服务或万维网发布服务,或者依赖这 服务可能在启动期间发生错误或者已禁用...
- MPMoviePlayerController 电影播放器
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1051:分段函数
- 如何计算Java对象所占内存的大小
- RAC集群时间同步服务
- 二叉查找树之 Java的实现
- python shell 方向键不可用
- 数据科学家最常用的十种算法(我准备拿这个当成学习参考)
- 简单好用的洗鼻子方法?
- 11月27日“软件开发模式思考:传统与敏捷 我们在什么位置?”的主题活动成功举办
- 计算机网络安全基础复习(第四版)袁津生主编(转载请注明出处---https://www.cnblogs.com/qingl)...
- mac 显示及隐藏文件的方法
- 软考-高项-论文-信息系统项目的质量管理
- 处理100万条数据 python_仅需1秒!搞定100万行数据:超强Python数据分析利器
- 彻底删除Win7任务栏通知区域已卸载程序图标
- 关键词分析-对同行网站进行全面的分析-免费关键词分析工具
- Unity灯光烘焙设置详解
- [表格扫描OCR]快速扫描识别并获取表格图片内容[免费]
热门文章
- 产品管理,产品策划,产品设计
- 【趣题】几堆石子轮流捡,谁捡到最后的石子算输的游戏
- 使用SpotBugs 进行代码检查
- 计算机管理器用户怎么打开,win10无法使用内置管理员账户打开计算器如何设置...
- Python类和包的介绍
- 用二代测序数据的reads组装一个基因序列
- GraphTrans:Representing Long-Range Context for Graph Neural Networks with Global Attention
- 小白入门web前端360必问--Html标签语义化可能最全,越段位之神器;
- android按键录制,按键录制(FRep Finger Replayer)
- 几个免费的高清图片网站推荐