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は変化していない.