【发布时间】:2016-10-14 20:29:47
【问题描述】:
这是我的代码 sn-p:
int fd;
bufsize = 30;
char buf[bufsize];
char cmd[100] = "file.txt";
int newfd = 1;
if (fd = open(cmd,O_RDONLY) >=0){
puts("wanna read");
while (read(fd,&bin_buf,bufsize)==1){
puts("reading");
write(newfd,&bin_buf,bufsize);
}
close(fd);
}
所以这里程序打印"wanna read",但从不打印"reading"。我也尝试过使用非阻塞标志打开,但没有用。有谁能够帮助我?我必须只使用open() 和read() 系统调用。谢谢。
编辑:我在代码中做了一些澄清。实际上,我正在写入的 newfd 是一个套接字描述符,但我认为这对于这个问题并不重要,因为它会粘在 read 上,它位于 write 之前。
【问题讨论】:
-
那是因为它在读取的字节数为1时打印“正在读取”,但是您请求了
bufsize字节。 -
您只需启用警告
-Wall并修复所有的警告。 -
@user3386109:我理解你的沮丧,我个人鄙视 C 编译器仍然默认禁用许多救生警告这一事实!我总是打开
-Werror,但我承认这不应该是默认设置。 -
@chqrlie 是的,关于救生警告,我们同意!至于
-Werror,新手应该需要它;)
标签: c linux file-io system system-calls