低级I / O - 读/创/写(C)

时间:2013-10-30 04:57:17

标签: c low-level-io

我正在尝试在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]。

2 个答案:

答案 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是系统调用