質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1585閲覧

c言語での時間計測における問題

chiko.unagi

総合スコア13

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/05/08 05:13

前提・実現したいこと

以下の006.cのソースコードを拡張させて、バッファサイズを変更した場合のread,writeとfread,fwriteの性能を比較したい。

発生している問題・エラーメッセージ

measure.cにおいて、CLOCK_MOTONICが定義されていないというエラーが出ているのはなぜでしょうか。

そもそもmeasureを使っての計測はどのようにしたら行えるのでしょうか。

エラーメッセージ

該当のソースコード

006.c

1#include "exp1.h" 2 3 4 5int main(int argc, char** argv) { 6 7 FILE* fpr; 8 9 FILE* fpw; 10 11 int ret; 12 13 char buf[4]; 14 15 16 17 if(argc != 2) { 18 19 printf("usage: %s [filename]\n", argv[0]); 20 21 exit(-1); 22 23 } 24 25 26 27 fpr = fopen(argv[1], "r"); 28 29 fpw = fopen("tmp.txt", "w"); 30 31 32 33 ret = fread(buf, sizeof(char), 4, fpr); 34 35 while (ret > 0) { 36 37 fwrite(buf, sizeof(char), ret, fpw); 38 39 ret = fread(buf, sizeof(char), 4, fpr); 40 41 } 42 43 fclose(fpr); 44 45 fclose(fpw); 46 47 48 49 return 0; 50 51} 52 53

Makefile

1CC=gcc 2 3C++=g++ 4 5LD=g++ 6 7CFLAGS=-c -Wall -pedantic-errors -O3 -std=c11 -I../ 8 9LDFLAGS= 10 11OBJECTS=006.o 12 13EXECUTABLE=006 14 15 16 17all: $(EXECUTABLE) 18 19 20 21$(EXECUTABLE): $(OBJECTS) 22 23 $(LD) $(LDFLAGS) $(OBJECTS) -o $@ 24 25 26 27.cpp.o: 28 29 $(C++) $(CFLAGS) $< -o $@ 30 31 32 33.c.o: 34 35 $(CC) $(CFLAGS) $< -o $@ 36 37 38 39clean: 40 41 -rm -f ${EXECUTABLE} *.o tmp.txt core 42 43 44 45

measure.c

1 #include <stdio.h> 2 3 #include <unistd.h> 4 5 #include <time.h> 6 7 8 9 double get_current_timecount() { 10 11 struct timespec ts; 12 13 clock_gettime(CLOCK_MONOTONIC, &ts,); 14 15 return ts.tv_sec + ts.tv_nsec*1e-9; 16 17 } 18 19 20 21 int main( int argc, char* argv[] ) { 22 23 double t1 = get_current_timecount(); 24 25 26 27 // do something 28 29 30 31 32 33 34 35 sleep(3); 36 37 38 39 double t2 = get_current_timecount(); 40 41 printf("%lf\n", t2-t1); 42 43 return 0; 44 45 }

exp1.h

1#include <stdio.h> 2 3#include <stdint.h> 4 5#include <string.h> 6 7#include <strings.h> 8 9#include <errno.h> 10 11#include <stdlib.h> 12 13#include <math.h> 14 15#include <unistd.h> 16 17#include <time.h> 18 19 #include <termios.h> 20 21#include <float.h> 22 23 24 25 #include <sys/socket.h> 26 27 #include <arpa/inet.h> 28 29#include <sys/ioctl.h> 30 31#include <netdb.h> 32 33 34 35#include <fcntl.h> 36 37#include <sys/stat.h> 38 39#include <sys/types.h> 40 41#include <dirent.h> 42 43#include <signal.h> 44 45#include <pthread.h> 46 47

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/05/08 06:10

コンパイルしている環境は何でしょうか。Windows上で、Visual Studioなどを使用していませんか。
chiko.unagi

2020/05/08 06:19

linux上で行っております。 エディタではエラーコードが表示されているみたいなのですが、実行はできるみたいでした。 実行する際にファイル名を追加することが前提といった感じなのでしょうか。
dodox86

2020/05/08 06:32 編集

Windows上でVisual Studioなどを用いてWindows用の実行ファイルを作る際はCLOCK_MONOTINIC等が使えないがゆえの確認のコメントでしたが、linux上であればその点は大丈夫そうです。 「実行する際にファイル名を追加」というのはどういうことを指しているのでしょうか。コンパイルして実行ファイルはできあがるのですか。そうであればとりあえず問題はない気がしますが、エラー内容を質問文中に提示すると、私のこのコメントより適切な回答を得られるかもしれません。
guest

回答3

0

ベストアンサー

Makefileのc11を削除すればコンパイルできませんか?

Makefile

1CFLAGS=-c -Wall -pedantic-errors -O3 -I../

投稿2020/05/08 11:33

etsuhisa

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず

C

1 clock_gettime(CLOCK_MONOTONIC, &ts,);

&tsの後ろのカンマを削除しても同じエラーですか?
エラーメッセージも掲載してください。

投稿2020/05/08 05:29

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chiko.unagi

2020/05/08 05:38

変化ありませんでした。 以下エラーメッセージになります。 識別子 "CLOCK_MONOTONIC" が定義されていません
guest

0

CLOCK_MOTONICが定義されていないからでしょう。
それはどこで定義されてるんでしょうか

#スペルミス?

投稿2020/05/08 05:25

編集2020/05/08 05:27
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問