C言語の基礎(5)プログラムを小分けに分割して、見やすく、分かりやすく、少しずつ作ります
ファイル分割
- テキストエディタで ciapia.h を作成する
/**********************************************************
* ヘッダーファイル
*/
extern void sub_1();
extern void sub_2(int);
extern char *sub_3(); |
- テキストエディタで ciapia1.c を作成する
/**********************************************************
* 主処理
*/
#include <stdio.h>
#include "ciapia.h"
int main(){
sub_1();
sub_2(120);
printf( "戻値: %s\n", sub_3() );
} |
- テキストエディタで ciapia2.c を作成する
/**********************************************************
* sub_1:サブルーチン
*/
#include <stdio.h>
#include "ciapia.h"
void sub_1(){
printf( "Hello,,,\n" );
} |
- テキストエディタで ciapia3.c を作成する
/**********************************************************
* sub_2:関数(データ渡し)
*/
#include <stdio.h>
#include "ciapia.h"
void sub_2(int iVal){
printf( "入力値は %d です\n", iVal );
} |
- テキストエディタで ciapia4.c を作成する
/**********************************************************
* sub_3:関数(戻り値)
*/
#include <stdio.h>
#include "ciapia.h"
char *sub_3(){
return ("sub_3()");
} |
- ソースファイルをコンパイルし実行ファイルを作成する
$ gcc -o ciapia ciapia1.c ciapia2.c ciapia3.c ciapia4.c
- 実行ファイルを起動する
$ ./ciapia
makefile
- テキストエディタで dba.h を作成する
/**********************************************************
* ヘッダーファイル
*/
#include <libpq-fe.h>
#define DB_NAME ""
#define DB_USER "postgres"
#define DB_PWD "pgAdmin"
extern PGconn *pCon;
extern PGresult *pRes;
extern int dbLogin();
extern int dbIns(char *);
extern int dbList();
extern void dbLogout(); |
- テキストエディタで dba.c を作成する
/**********************************************************
* 主処理
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dba.h"
PGconn *pCon;
PGresult *pRes;
int main( int iInp, char *pInp[] ){
if( dbLogin()==0 ){
if( ( iInp < 1 ) && ( strlen( pInp[1] ) < 100 ) ){
/// 入力データを登録する
dbIns( pInp[1] );
}
/// データ抽出
dbList();
/// DB切断
dbLogout();
}
} |
- テキストエディタで dbLogin.c を作成する
/**********************************************************
* DB接続
*/
#include "dba.h"
int dbLogin(){
/// DB接続
pCon = PQsetdbLogin( "", "", NULL, NULL, DB_NAME, DB_USER, DB_PWD );
if( PQstatus( pCon ) == CONNECTION_BAD ){
printf( "DB接続エラー: %s\n", PQerrorMessage( pCon ) );
return(1);
}
return(0);
} |
- テキストエディタで dbIns.c を作成する
/**********************************************************
* データ登録
*/
#include <string.h>
#include "dba.h"
/// データ登録
int dbIns( char *ptr ){
char sSql[1000];
sprintf( sSql, "insert into 伝言板(伝言) values('%s')", ptr );
pRes = PQexec( pCon, sSql );
if( PQresultStatus( pRes ) != PGRES_COMMAND_OK ){
PQclear( pRes );
printf( "データ登録: %s", PQerrorMessage( pCon ) );
return(1);
}
PQclear( pRes );
return(0);
} |
- テキストエディタで dbList.c を作成する
/**********************************************************
* データ抽出・出力
*/
#include <stdlib.h>
#include "dba.h"
int dbList(){
int ii, iCnt;
/// データ抽出
pRes = PQexec( pCon, "select 番号,to_char(登録日,'MM/DD HH24:MI'),伝言 "
"from 伝言板 order by 番号 desc limit 10;" );
if( PQresultStatus( pRes ) != PGRES_TUPLES_OK ){
printf( "データ抽出: %s\n", PQerrorMessage( pCon ) );
return(4);
}
/// 抽出データ出力
iCnt = PQntuples( pRes );
for( ii=0; ii<iCnt; ii++ ){
printf( "%4d [%s] %s\n"
, atoi( PQgetvalue( pRes, ii, 0 ) )
, PQgetvalue( pRes, ii, 1 )
, PQgetvalue( pRes, ii, 2 ) );
}
PQclear( pRes );
return(0);
} |
- テキストエディタで dbLogout.c を作成する
/**********************************************************
* DB切断
*/
#include "dba.h"
void dbLogout(){
PQfinish( pCon );
} |
- テキストエディタで makefile を作成する
### Define
POSTGRES_INC=/usr/include/postgresql
CFLG=-I./ -I$(POSTGRES_INC) -Wall -fPIC
LFLG=-Wall -O2
OBJS=dba.o dbLogin.o dbIns.o dbList.o dbLogout.o
ULIB=-lpq
TARGET=dba
all: $(TARGET)
### Link
$(TARGET): $(OBJS)
gcc $(LFLG) -o $(TARGET) $(OBJS) $(ULIB)
### Compile
dba.o: dba.c dba.h
gcc -c $(CFLG) $<
dbLogin.o: dbLogin.c dba.h
gcc -c $(CFLG) $<
dbIns.o: dbIns.c dba.h
gcc -c $(CFLG) $<
dbList.o: dbList.c dba.h
gcc -c $(CFLG) $<
dbLogout.o: dbLogout.c dba.h
gcc -c $(CFLG) $<
### Clean
clean:
rm -f *.o |
- ソースファイルをコンパイルし実行ファイルを作成する
$ make
- 実行ファイルを起動する
$ ./dba こんにちは
|