使用c,使用unix系统调用无法写入文件

时间:2013-09-06 10:51:20

标签: c unix

我正在研究unix system calls。 我想使用stringstandard input阅读read(),然后使用write()将其写入文件。

我可以open read文件string standard input来自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 outputwrite()

问题:

1)\n有什么问题?

2)我想在行尾添加换行符standard input。如何才能通过{{1}}?

2 个答案:

答案 0 :(得分:3)

fd = open("myfile",O_RDWR);

这将打开一个现有文件。如果该文件不存在,则会出错。 您可以使用perror()来获取有关错误的更多描述。

fd = open("myfile",O_RDWR);
if (fd == -1) {
   perror("open failed");
   exit(1);
}

此处的错误是您的错误检查逻辑错误。

if(fd != -1)
     printf("open error\n");

应该是

if(fd == -1)
     printf("open error\n"); //or better yet, perror("open error");

更正后,如果文件尚不存在,则在打开文件时仍会出现错误。要创建文件,还需要一个额外的标志,并赋予其适当的权限:

fd = open("myfile",O_RDWR|O_CREAT, 0664);

答案 1 :(得分:2)

if(fd != -1)
     printf("open error\n");

这看起来不对。如果您的输出不是“打开错误”,则可能意味着您对open的调用失败,因为您只能在未能打开文件时尝试写入文件。

一个好主意是在打印错误时打印错误,将错误打印到stderr,而不是stdout,并在出错时立即退出。尝试使用perror打印错误消息。

另外,我不喜欢这个评论:

#include <unistd.h>     // to remove WARNINGS LIKE  warning: implicit declaration of       function ‘read’ , warning: implicit declaration of function ‘write’

“删除警告”不需要包含。需要让你的程序正确。