问题描述
学习apue的时候,刚刚看到文件IO(第三章的内容),想着测试一下write和read函数的功能,熟悉一下,但是发现一直得不到想要的输入输出。
程序如下:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <sys/wait.h>
int main(){
int fd = open("input", O_RDWR);
if(fd < 0)
perror("open failed:");
char *buf = "childdafssdfsadfsdafsdfasdf";
ftruncate(fd, 0);
ssize_t num = write(fd, buf, sizeof(buf));
if(num < 0)
perror("child write:");
close(fd);
fd = open("input", O_RDWR);
char buf_read[10];
int r = 0;
while((r = read(fd, buf_read, sizeof(buf_read))) != 0){
printf("%s",buf_read);
}
return 0;
}
这个程序理想的功能应该是将buf所有的数据内容写入input文件中,但是打开input文件发现确实这样:
只写了8个数据,测试好多遍都不知道问题出现在哪儿。
然后我重新手动将write的输入参数ssize_t输入为buf大小,发现能够达到理想的效果了。
这样对比下来就是输入参数sizeof(buf)出错了,sizeof运算符计算的是变量的大小,buf是指针,指针的大小与系统有关(4字节或者8字节,看是32位机器还是64位机器),这里是写入字符串的个数,所以应该使用strlen函数才对。