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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

Q&A

解決済

1回答

2829閲覧

C言語 ソケット read関数の使い方について

kazuyakazuya

総合スコア193

C

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

0グッド

0クリップ

投稿2019/08/28 03:54

編集2019/08/28 04:02

C言語のread関数の使い方がわからず困っています。(コンパイルしようとしてもread関数のところでエラーになる。)
下記のコードの中の

c

1#include <winsock2.h> 2 3int 4main() 5{ 6 WSADATA wsaData; 7 SOCKET sock0; 8 struct sockaddr_in addr; 9 struct sockaddr_in client; 10 int len; 11 SOCKET sock; 12 13 WSAStartup(MAKEWORD(2, 0), &wsaData); 14 15 sock0 = socket(AF_INET, SOCK_STREAM, 0); 16 17 addr.sin_family = AF_INET; 18 addr.sin_port = htons(12345); 19 addr.sin_addr.S_un.S_addr = INADDR_ANY; 20 21 bind(sock0, (struct sockaddr*) & addr, sizeof(addr)); 22 23 listen(sock0, 5); 24 25 while (1) { 26 len = sizeof(client); 27 sock = accept(sock0, (struct sockaddr*) & client, &len); 28 read(int sock, (struct sockaddr*) &client,&len); ←ここ 29 30 closesocket(sock); 31 } 32 33 WSACleanup(); 34 35 return 0; 36} 37end

c

1read(int sock, (struct sockaddr*) &client,len); ←ここ

ここです。
read関数の使い方
イメージ説明

c

1#define _OE_SOCKETS 2#include <unistd.h> 3 4ssize_t read(int socket, void *buf, ssize_t N);

まず第一引数には
接続されたソケットを指定するとあります。
つまり、acceptで接続できたものを指定するのだから
sockを指定しました。

あと参考にした記事では
read関数の前にssize_t
があるのですがこれは一体なんですか?
ssize_tに関する説明は一切書かれていません。

いろいろ試したのですがわかりません。
分からないので参考になるリンクまたは説明をお願いします。

#追記
イメージ説明

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

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

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

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

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

can110

2019/08/28 03:56

エラーメッセージを記載ください。
kazuyakazuya

2019/08/28 03:59

ありがとうございます。 今すぐ追記します。
cateye

2019/08/28 04:06

accept()の結果はどうなっていますか? ssize_tについては→https://www.wdic.org/w/TECH/ssize_t
kazuyakazuya

2019/08/28 04:10

accept()の結果はどうなっていますか? >エラーも起こらず正常に動作しています。(acceptまでは) 原因は回答でいただいたWinsockにはreadという関数は存在しない・・・ でした。 また違うエラーが出ましたがrecv関数自体は読み込めたようです。
kazuyakazuya

2019/08/28 04:11

ssize_tについては→ >ありがとうございます。
guest

回答1

0

ベストアンサー

Winsockにreadという関数は存在しませんMSDN)。代わりにrecvを使ってください。

投稿2019/08/28 04:00

maisumakun

総合スコア145183

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

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

maisumakun

2019/08/28 04:07

readの定義のところにある<unistd.h>は、Unix系にしか存在しないファイルです。
kazuyakazuya

2019/08/28 04:10

ありがとうございます。
dodox86

2019/08/28 04:11

質問者さんは以前のソケットプログラミングに関連する質問で「Winsockもいまさらなので、UNIX仮想環境にする」とのことでしたが、結局Winsockを使うことにしたので、事態と理解がややこしいことになっているようです。
bsdfan

2019/08/28 04:12

それに加えて、構文エラーになっているのは、関数呼び出し時の、sockの前のintが不要です。
kazuyakazuya

2019/08/28 04:16

sockの前のintが不要です。 >ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問