【问题标题】:Using read and write system calls with sprintf通过 sprintf 使用 read 和 write 系统调用
【发布时间】:2014-02-22 04:36:27
【问题描述】:

我将只对 c 程序使用 read 和 write 系统调用。因此,不能使用 printf、getc 等。由于我不能使用 printf,我需要为此使用 sprintf。但是,我找不到如何将 sprintf 与文件 i/o 系统调用一起使用的示例。我需要使用 write(....), read(.....)

【问题讨论】:

  • char buffer[100]; sprintf(buffer, "%d\n", some_int); write(fd, buffer, strlen(buffer));

标签: c file-io printf


【解决方案1】:

通过系统调用的文件 I/O 比调用 C 文件 I/O 库更简单,并且在较低级别上运行。 使用这些系统调用需要一个名为“fcntl.h”的头文件:

 #include <fcntl.h>

"creat()" 系统调用当然会创建一个文件。它的语法如下:

<file descriptor variable> = creat( <filename>, <protection bits> );

ex:

   #define RD_WR 0666 
   int fd;                               /Define file descriptor. */    
   fd = creat( "data", RD_WR );

"open()" 系统调用打开一个现有文件进行读取或写入。它有语法

   <file descriptor variable> = open( <filename>, <access mode> );

   O_RDONLY    Open for reading only.
   O_WRONLY    Open for writing only.
   O_RDWR      Open for reading and writing.
ex:
   int fd;
   fd = open( "data", O_WRONLY );

"close()" 系统调用非常简单。它所做的只是"close()" 一个打开的文件,而无需进一步访问它。 "close()" 系统调用的语法如下:

   close( <file descriptor> );

"write()" 系统调用将数据写入打开的文件。它的语法是:

   write( <file descriptor>, <buffer>, <buffer length> );
ex:
  float array[10];
   ...
   write( fd, array, sizeof( array ) );

"read()" 系统调用从打开的文件中读取数据。其语法与"write()"调用完全相同:

   read( <file descriptor>, <buffer>, <buffer length> );

【讨论】:

  • 我的 sprintf 问题呢?
  • 所以你想要sprintf 用于文件输入/输出? sprintf 用于写入/读取字符串而不是文件。供文件使用fprintf.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多