Linux C++readとwrite,open関数の使用


#include <unistd.h>
#include <stdlib.h>
int main()
{
    char  buffer[128];
        int nread;
        //         
    nread = read( 0, buffer, 128);
        if(-1 == nread)
        {
           //      
       write(2,"it is read error
",20); } // if(nread != write(1,buffer,nread)) { write(2,"it is write error
",20); } exit(0); }

0:標準入力を表す
1:標準出力を示す
2:エラー出力を示す
ヘッダファイル#include
size_t write(int   fildes,  const void * buf , size_t length);
fildes出力のモード
buf出力文字列
length出力文字列の長さ
size_t read(int fildes, void *buf, size_t length);
fildes標準入力モード
buf入力文字列
length入力文字列の長さ
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
    char buffer[1024];
    int in,out;
    int nread;
    //         
    in = open("./a.txt",O_RDONLY);
        //          
    out = open("./b.txt",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
        //       1024         
    while( ( nread = read(in,buffer,sizeof(buffer)) ) > 0)
    {
        write(out,buffer,nread);
    }
    exit(0);
}

次のコマンドを使用してtimeツールを使用して、プログラムの効率とリソースの使用状況をテストします.
TIMEFORMATE=""time ./readfile
[leconte@localhost test]$ time ./test
  real 0m0.020s
  user 0m0.000s
  sys 0m0.018s
その結果、プログラムの実際の実行時間は0.020 sであり、ユーザ状態の実行時間は0 sに近い、カーネル状態の実行時間は0.018 sであることが明らかになった.これは、ファイル関連のシステム呼び出しを使用して、プログラムの大部分がカーネル状態で動作するためです.
realはuser+sysの合計に等しくないことに注意してください.realはプログラムの開始から終了までの全時間を表し,プログラムがCPUを占めなくても時間を統計する.一方、user+sysは、システム負荷に関係なく、プログラムがCPUを占有する総時間であるため、realは常にuser+sys以上である.
例えば、上記のプログラムにsleep(1)を追加します.
  for(i=0;i<3;++i)
  {
  sleep(1);
  fprintf(fp,"%dn",i);
  }
timeでの統計結果は次のとおりです.
  [leconte@localhost test]$ time ./test
  real 0m3.025s
  user 0m0.000s
  sys 0m0.019s
3回sleep(1)を実行したため、realの時間はさっきより3 s多くなり、この3 s内のプログラムはCPUを占有していないため、user+sysは変化していない.