文件写入数据

头文件:

#include

phpfwrite的返回值write函数的功效介绍及实例 Vue.js

原型:

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

参数:

fd: 文件描述符

buf: 存放要写入的数据的缓冲区首地址

count: 想要写入的字节数

返回值:

>=0:成功写入的字节数,0表示什么都没写入

-1: 写入失落败,并设置全局变量errno

例:

#include

#include

#include

#include

#include

#include

#include

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);

return 0;

}

把稳: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);

嵌入式物联网须要学的东西真的非常多,千万不要学错了路线和内容,导致人为要不上去!

无偿分享大家一个资料包,差不多150多G。
里面学习内容、面经、项目都比较新也比较全!
某鱼上买估计至少要好几十。

扫码进群领资料