我想在C中使用低级别的函数,并希望从STDIN读取并将该信息存储在文件中。低级别的I/O - 读取/创建/写入(C)
int dash, c;
char buffer[1024];
if((dash = creat("file.txt", S_IRWXU)) < 0)
perror("creat error");
while ((c = read(STDIN_FILENO, buffer, sizeof(buffer))) > 0) {
if (write(dash, buffer, c) != c)
perror("write error");
我在理解如何访问'file.txt'来读取它以打印到屏幕或存储到另一个文件时遇到问题。我会用'read(“file.txt”,buffer,sizeof [buffer])'吗?
编辑 现在创建 “file.txt”,但之后我想打开另外一个文件,可以说文件1(的argv [3]),并转储文件 “file.txt” 到文件1(agrv [3])。这会工作吗?
fd = open(argv[3], O_RDWR); //open 3rd arg for writing
fd_2 = open("file.txt", O_RDWR); //open created file
do {
n = read(fd_2, buffer, sizeof(buffer));
if (n < 0)
perror("read error argv[2]"); //greater 0=succesful
write(STDOUT_FILENO, buffer, n); // this is where I'm stuck
} while (n == sizeof(buffer));
close(fd);
我有两个文件现在打开,但无法弄清楚如何将“file.txt”写入argv [3]。
如果你使用'科瑞()',你将清除文件的以前的内容;它是空的。没有什么可读的。 –
但是,如果这是第一次“file.txt”正在写入,我应该仍然能够从中读取它的内容复制到另一个文件吗? – MBan
如果文件已创建,则为空。当然,如果您愿意,可以将零字节复制到另一个文件中,但这是毫无意义的练习。在'creat()'之后,在文件中写入一些数据之前,文件中没有任何东西需要读取。 POSIX定义['creat()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/creat.html)说:_'' creat()'函数的行为应该如下执行: 'int creat(const char * path,mode_t mode) { return open(path,O_WRONLY | O_CREAT | O_TRUNC,mode); }'_因此当你使用'creat()'时,文件描述符是不可读的。 –