我正在尝试在C中使用低级函数,并希望从STDIN读取并将该信息存储在文件中。
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”之后我想打开另一个文件,让我们说file1(argv [3])并将“file.txt”转储到file1(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]。
答案 0 :(得分:2)
使用open()
获取文件描述符:
int fd = open("file.txt", O_RDWR);
然后您可以使用read()
来读取此文件描述符,就像STDIN_FILENO
一样。
c = read(fd, buffer, sizeof(buffer));
确保在实际代码中检查两个函数的返回值。
答案 1 :(得分:0)
试试代码。将输入文件名作为第二个参数。
#include<stdio.h>
#include<fcntl.h>
#define MAX_BUF_SIZE 512
int main(int argc, char **argv)
{
int fd;
int count,value;
char buf[MAX_BUF_SIZE];
if(argc < 2)
fprintf(stderr, "Usage: a.out filename\n");
else
{
fd = open(argv[1], O_RDONLY);
if(fd < 0 )
fprintf(stderr, "Error In Opening File\n");
else
{
fprintf(stdout, "Enter No of bytes to read from file %s\n",argv[1]);
fscanf(stdin,"%d",&value);
printf("value %d\n",value);
count = read(fd,buf,value);
buf[count]='\0';
if(count <=0)
fprintf(stderr, "Error In Reading from file\n");
else if(count < value)
fprintf(stdout, "Partial read data is %s\n",buf);
else if(count == value)
fprintf(stdout, "Data is: \n%s\n",buf);
else
fprintf(stderr,"Error in read.");
close(fd);
}
}
return 0;
}
将'\ 0'添加到缓冲区以避免输出中的任何垃圾值。
注意:fopen,fread是库fn,其中open,read是系统调用