如何使用低级write()函数将字符串写入文件?

时间:2013-10-30 08:31:38

标签: c string low-level low-level-io low-level-code

例如,我能够将输入文件的内容写入和输出文件:

char buffer[1024]; // character buffer
char userInput[1024]; // for user input
char *p;
char *q;
int n;
int input_file1; // file descriptor for file 1
int input_file2; // file descriptor for file 2
int output_file; // file descriptor for output_file

    while((n = read(input_file1, buffer, sizeof(buffer))) > 0)
    {
    progress("entered first while loop");
        if((write(output_file, buffer, n)) < 0)
        {
            progress("couldn't write to output within while loop 1");
            perror(argv[3]);
            close(input_file1);
            close(input_file2);
            close(output_file);
            exit(1);
        }
    }

我也有一些用户输入:

printf("\nEnter text then hit enter: ");
q = fgets(userInput, sizeof(userInput), stdin);

我想使用write();

将用户输入附加到同一输出文件

我该怎么做?

-----更新----与

一起使用
if(strcmp(argv[1], "-") == 0) // use standard-in for input file 1
    {
        progress("file 1 detected as \"-\": using std input");
        p = fgets(userInput, sizeof(userInput), stdin);
        if (write(output_file, userInput, sizeof(p)) < 0) {
            progress("write from stdin to output file failed");
            perror(argv[4]);
            exit(1);
        }
        progress("wrote from stdin to output file");
    }

4 个答案:

答案 0 :(得分:0)

只是你做了同样的事情。但你不必在第一次关闭文件时。

并从用户获取输入(stdin),然后使用write()函数将其写入文件

q = fgets(userInput, sizeof(userInput), stdin);
write(output_file, userInput, strlen(userInput));
close(output_file);

答案 1 :(得分:0)

假设您已经打开output_file进行写入(并可能写入):

#define MAX 120
char buffer[MAX];
int len = sprintf(buffer, "Whatever you want to print in %d characters.\n", MAX);
if (write(output_file, buffer, len) < 0) {
   perror("Cannot write to file.");
   exit(1);
}

答案 2 :(得分:0)

write()函数有原型:

ssize_t write(int fildes, const void *buf, size_t nbyte);

在能够搜索的常规文件或其他文件上,实际的数据写入应从与fildes相关的文件偏移量所指示的文件中的位置开始。在从write()成功返回之前,文件偏移量应增加实际写入的字节数。在常规文件中,如果此递增的文件偏移量大于文件的长度,则应将文件的长度设置为此文件偏移量。

在不能寻找的文件上,写作应始终从当前位置开始。与此类设备关联的文件偏移值未定义。

如果设置了文件状态标志的O_APPEND标志,则应在每次写入之前将文件偏移设置为文件的末尾,并且在更改文件偏移和写入操作之间不应进行中间文件修改操作。 / p>

答案 3 :(得分:0)

只需open()输出文件,模式为O_APPEND

output_file = open("output", O_WRONLY | O_APPEND | O_CREAT);

这样,write将附加到文件中。

write(output_file, userInput, strlen(userInput));