1

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

4

2 回答 2

3

用于open()获取文件描述符:

int fd = open("file.txt", O_RDWR);

然后你可以使用read()从这个文件描述符中读取,就像STDIN_FILENO.

c = read(fd, buffer, sizeof(buffer));

确保在实际代码中检查这两个函数的返回值。

于 2013-10-30T05:05:31.613 回答
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 是系统调用

于 2013-10-30T05:47:34.163 回答