使用write函数遇到的问题

write有两种用法。一种是:ssize_t write(int fd, const void *buf, size_t nbyte);
fd:文件描述符;
buf:指定的缓冲区,即指针,指向一段内存单元;
nbyte:要写入文件指定的字节数;
返回值:写入文档的字节数(成功);-1(出错)
write函数把buf中nbyte写入文件描述符handle所指的文档,成功时返回写的字节数,错误时返回-1.
另一种是: write(const char* str,int n)
str是字符指针或字符数组,用来存放一个字符串。n是int型数,它用来表示输出显示字符串中字符的个数。
write(”string”,strlen(“string”);表示输出字符串常量

那么知道了用法后在你写文件的过程中你会不会遇到你写不进文件的情况呢?
我就遇到过bad file descriptor这种情况,而且困扰了我好久,看了半天也找不出错误。
主要是因为权限的问题,你在open的时候就应该给执行者(自己)写的权限,可是你却没给,这时候就会出现写不进文件的事情了。
还有一种情况:假设你用writenum = write(fd,buffer,1024);然后输出writenum是大于0的值,所以它明明是写进去了,可是怎么打不开文件呢?
因为这时候你其实并没有写进去那么多的字符,所以这时候就会出现问题,系统会把默认生成的txt文件转换成了你无法查看的二进制文件(你可以用od -c 文件名作为大概的查看)。
那么应该怎么改呢?
这时候你就要write的第三个参数就应该用strlen(buffer)了,而不是用sizeof或者你给它定义的常数,大家可以自己去试试验证下,这个在保存数据的时候还是挺有用的!

猜你喜欢

转载自blog.csdn.net/tjy199610_10/article/details/80099251