gpt4 book ai didi

c - 无法通过 unix 系统调用使用 c 写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:41 24 4
gpt4 key购买 nike

我正在研究 unix system calls .我想阅读 string来自 standard 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 stringstandard output

问题:

1) write() 有什么问题? ?

2) 我想包含换行符 \n在该行的末尾。怎么可能通过standard input

最佳答案

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);

关于c - 无法通过 unix 系统调用使用 c 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18656026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com