投稿

9月, 2019の投稿を表示しています

Linuxシステムコール、INETドメイン ソケット

UNIX / Linux システムコール・プログラミング プロセス間通信(IPC)、ソケット通信/INETドメイン ソケット Unixドメイン ソケットとは? Unixドメイン ソケットは、ノード間のネットワーク通信を行うことができ、現代のインターネット環境の基盤技術の1つと言えます。 INETドメイン ソケットを利用することで実際のネットワーク上のプロトコルであるTCP/IPやUDP/IPを意識したプログラミングが可能になります。 ※今回のサンプルコードは、TCP/IPです。 基本的に、INETドメイン ソケットもUnixドメイン ソケットと同様の実装となりますが、異なるノード間での通信を実現するため、ネットワークアドレスやポート番号を意識する必要があります。 それでは、サーバー側のコードを以下に示します。 inet-dimain-server.c #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> // Make server socket. // int makeServer(int portNo) { int sfd; int ret; struct sockaddr_in serv; // Create server socket. if((sfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("ERROR:Server Socket()"); return -1; } // Bind socket memset(&serv, 0, sizeof(struct sockaddr_in));

Linuxシステムコール、Unixドメイン ソケット

UNIX / Linux システムコール・プログラミング プロセス間通信(IPC)、ソケット通信/Unixドメイン ソケット Unixドメイン ソケットとは? Unixドメイン ソケットは、同一ノード内(1つのCPUで動作する1つのオペレーティング・システム内)で動作するプロセス間で、双方向の通信手段を提供します。 また、ソケットはクライアント/サーバー モデルで構成されており、1つのサーバーが複数のクライアントからの通信を受け入れる構造をとります。 まず、以下にサーバー側のサンプルコードを示します。 unix-dimain-server.c #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> // Make server socket. // int makeServer(char* sockName) { int sfd; int ret; struct sockaddr_un name; // Unlink, last running remove the socket. unlink(sockName); // Create server socket. if((sfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { perror("ERROR:Server Socket()"); return -1; } // Bind socket memset(&name, 0, sizeof(struct sockaddr_un)); name.sun_family = AF_UNIX; strncpy(name.sun_path, sockName, sizeof(name.sun_path) - 1); if ((r

Linuxシステムコール、セマフォの使い方

イメージ
UNIX / Linux システムコール・プログラミング プロセス間通信(IPC)、セマフォ セマフォとは? セマフォ、聞き慣れない言葉ですが大昔の鉄道の信号機のことです。 単線区間で列車同士が衝突しないようにするため、信号機が使われました。 意味合い的には同様で、コンピューター内のある資源(メモリなど)に別々のプロセスが同時にアクセスしないようにするために利用します。 セマフォはSYSTEM V IPC です。 この、セマフォを利用することで複数のプロセスが同期して処理を進めることができます。 Linuxのセマフォは、セマフォ集合として生成して利用します。 このため、1つのセマフォ集合に複数のセマフォを含めることができ、Linuxのセマフォはカウンティングセマフォであるため、複数の許可を与えることも可能です。 ただし、この記事のサンプルコードは1つの集合に1つだけのセマフォ、許可数は1つだけとなっています。 まず、セマフォ生成のサンプルコードを示します。 seminit.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <stdio.h> #include <stdlib.h> union semun { int val; struct semid_ds *buf; unsigned short *array; }; int main() { key_t key; int semid; union semun arg; if ((key = ftok("sem.dat", 'S')) == -1) { perror("ftok"); exit(1); } /* create a semaphore set with 1 semaphore: */ if ((semid = semget(key, 1, 0666 | IPC_CREAT)) == -1) { p

Bluetooth経由での BeagleBone Black ログインする

今回は、BeagleBone Black に Bluetooth 経由でログインするまでのメモ記事です。 Windows10のPCから、Bluetooth 経由で BeagleBone Black にログインします。 Linuxで Bluetooth を利用するときはほぼ同じような手順になります。 最近では、BeagleBone Black に無線機能が搭載されたボードが発売されています。 BeagleBone Black Wireless では、Wi-Fi と Bluetooth を利用することができます。 しかし、手元の BeagleBone Black では無線機能がないため、外付けで利用することになります。 準備: Bluetoothドングル  今回、利用したのはバッファローの BSBT4D09BK です。  この、BluetoothドングルをUSBポートに接続して利用します。  → バッファローのページへ 5V AC/DCアダプター  BeagleBone Black で外付けのデバイスを利用するときには必要なようです。  (BeagleBone Greenでは不要なような?)  HDMI出力時も必要になりますが、内部的にUSB給電では電力不足なのでしょうね。  モノは、手元にあった秋月電子の5Vのアダプタを使いました。 RootFS  RootFSは、BeagleBone 用のRootFSを持ってきてください。  Bluetooth関連のソフトウェアもインストール済みです。 ログインまで: 1. BeagleBone Black でBluetoothを開始します。  "bluetoothctl" コマンドで以下の操作を行います。  コマンドを実行すると、サブコマンドの受付状態になります。  以下のサブコマンドを投入します。     power on      discoverable on      agent on      default-agent  この状態で、コントローラーがON、他機から検出可能、  ペアリング可能な状態となります。  Bluetoothコントローラーの状態を確認したいときは、   show