【发布时间】:2013-09-10 10:49:00
【问题描述】:
我正在处理unix system calls。
我想使用read()从standard input读取string,然后使用write()将其写入文件。
我可以open 文件,read 来自standard input 的string,但无法write 将其发送到文件。
我的代码是:
#include <unistd.h> // to remove WARNINGS LIKE warning: implicit declaration of function ‘read’ , warning: implicit declaration of function ‘write’
#include<fcntl.h> /* defines options flags */
#include<sys/types.h> /* defines types used by sys/stat.h */
#include<sys/stat.h> /* defines S_IREAD & S_IWRITE */
#include<stdio.h>
int main(void)
{
int fd,readd;
char *buf[1024];
fd = open("myfile",O_RDWR);
if(fd != -1)
printf("open error\n");
else
{
// read i\p from stdin , and write it to myfile.txt
if((readd=read(0,buf,sizeof(buf)))<0)
printf("read error\n");
else
{
printf("\n%s",buf);
printf("\n%d",readd);
if(write(fd,buf,readd) != readd)
printf("write error\n");
}
}
return 0;
}
输出是
write error
如果我 write string 到 standard output,它工作正常
问题:
1) write() 有什么问题?
2) 我想在行尾包含换行符\n。怎么可能通过standard input?
【问题讨论】:
-
你可能想要
char buf[1024],而不是char *buf[1024]。 -
检查
errno变量。 -
代替
printf("write error"),使用perror("write")之类的东西。这会告诉你发生了哪个错误。 -
它给了我错误
Bad file descriptor,这意味着这些file descriptor无效,但是先生该怎么办?我不给file descriptor。 -
下面提到的所有事情,都已更正。但它仍然没有写我在
standard input中写的内容,它写的是kkcmvdksvdslvdvldzvd。