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

问题描述:

例如,我可以输入文件的内容写入到输出文件,:如何使用低级别write()函数将字符串写入文件?

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"); 
    } 

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

和获取用户(标准输入)输入,然后将其与write()功能

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

test.c:96:错误:调用对象'us​​erInput'不是函数 – Chips

+0

@chips。这是一个错字。我修复了我的代码 – MOHAMED

+0

test.c:在函数'main'中: test.c:96:警告:不兼容隐式声明内置函数'strlen' – Chips

写入该文件假设你已经打开了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); 
} 
+0

我试过了,它会自动输入文本,而不是等待我输入任何内容。它是随机垃圾:?[]Ð?t& – Chips

+0

这回答了“我如何使用低级write()函数将字符串写入文件?”。它不会告诉你如何做其他事情,比如阅读用户输入。你的问题中你有这个角色。 – nickie

写()函数的原型:

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

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

在无法找到的文件上,写入始终应从当前位置开始。与此类设备关联的文件偏移量的值未定义。

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

只是open()与模式O_APPEND

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

这样的输出中的文件,写入将追加到该文件。

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

test.c:在函数'main'中: test.c:96:警告:不兼容的隐含声明内置函数'strlen' – Chips

+0

你必须'#include ' – Eregrith

+0

a +和我之间有什么区别使用:O_WRONLY | O_APPEND | O_CREAT – Chips