这是我的代码段:
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"
。我也尝试使用nonblock标志打开,但没有用。有谁能够帮我?我只能使用open()
和read()
系统调用。谢谢。编辑:我在代码中做了一些澄清。实际上,我要写入的newfd是一个套接字描述符,但是对于这个问题,我认为这并不重要,因为它粘在read
之前的上write
。
您的read()
呼叫尝试读取bufsize
字节并返回实际读取的字节数。除非bufsize ==
,否则read()
返回的可能性很小1
,因此几乎总是跳过该块,并且不会写入任何内容。
还要注意,if (fd = open(cmd, O_RDONLY) >= 0)
是不正确的,会集fd
到1
,把手为标准输出,如果该文件存在,导致read
失败的标准输入是最有可能的阅读没有打开。
请注意,read
在某些环境下,使用系统调用进行读取非常棘手,因为返回值-1
可能是可重新启动的。
这是一个改进的版本:
int catenate_file(const char *cmd, int newfd, size_t bufsize) {
int fd;
char buf[bufsize];
if ((fd = open(cmd, O_RDONLY)) >= 0) {
puts("wanna read");
ssize_t nc;
while ((nc = read(fd, buf, bufsize)) != 0) {
if (nc < 0) {
if (errno == EINTR)
continue;
else
break;
}
printf("read %zd bytes\n", nc);
write(newfd, buf, nc);
}
close(fd);
return 0;
}
return -1;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句