Mais conteúdo relacionado
Semelhante a C-langage (20)
Mais de Hiramatsu Ryosuke (12)
C-langage
- 6. ビット演算⼦子
&
:
論論理理積
|
:
論論理理和
^
:
排他的論論理理和
~∼
:
ビットを反転させる
<<
:
指定した数だけ左へシフト
(0埋め)
>>
:
指定した数だけ右へシフト
(機種依存)
- 8. 配列列
int
x[30];
int
x[30]
=
{10,
20,
30,
328};
int
x[]
=
{10,
20,
30,
328};
int
x[]; ←Error!
- 9. ⽂文字列列
char
name[20];
name[0]=ʼ’Sʼ’;
name[1]=”u”;
name[2]=.....
char
name[20]
=
{ʻ‘Sʼ’,
ʻ‘uʼ’,
ʻ‘zʼ’,
ʻ‘uʼ’,
ʻ‘kʼ’,
ʻ‘iʼ’,
ʻ‘¥0ʼ’};
printf(“%s¥n”,
name);
char
name[20]
=
“Suzuki”;
でも上と同様の効果
⽂文字はシングルクォーテーション!
⽂文字列列はダブルクォーテーション!
- 11. 2次元配列列
int
data[3][5]
={
{3,4,8,6,4},
{6,4,2,2,0},
...};
⾏行行
列列
5列列
3⾏行行
- 13. ポインタの使い⽅方
int
*pa;
pa
=
&a; a
のアドレスを⼊入れる
printf(“%p¥n”,
pa); a
のアドレスを表⽰示
printf(“%d¥n”,
*pa); a
の値を表⽰示
*pa
+=
10; a
に10を⾜足す
- 14. ファイルの⼊入出⼒力力
-‐‑‒
ファイルポインタ編
r
読み出し
w
書き込み
FILE
*fp; a
追加
r+
読み書き(新規作成なし)
w+
読み書き(新規作成あり)
fp
=
fopen(“file.txt”,
“r”);
a+
読み書き(新規作成あり)
if(
(fp
=
fopen(“file.txt”,
“r”))
==
NULL
){
/*
エラー処理理
*/
}
- 15. ファイルの⼊入出⼒力力
-‐‑‒
⼊入⼒力力関数編
while(
(c=getc(fp))
!=
EOF
)
printf(“%c”,
c);
while(
fscanf(fp,
“%s%d”,
city,
value)
!=
EOF
)
printf(“%s
-‐‑‒>
%d¥n”,
city,
value);
書式⽂文字の利利⽤用が可能!
- 16. ファイルの⼊入出⼒力力
-‐‑‒
出⼒力力関数編
for(i=0;
name[i]
!=
(c=getc(fp))
!=
EOF
)
printf(“%c”,
c);
fprintf(fp,
“%s%d”,
city,
value);
書式⽂文字の利利⽤用が可能!
- 18. ⾼高度度なポインタ
2.
ポインタのポインタ
char
*p,
**dp;
p
=&c;
dp
=
&p;
printf(“%p¥n”,
*dp); 変数C
のアドレスが表⽰示
printf(“%d¥n”,
**dp); 変数C
の中⾝身が表⽰示
- 20. モジュール化プログラミング
-‐‑‒
make
コマンド
-‐‑‒
関数プロトタイプ宣⾔言
-‐‑‒
ヘッダファイル(.h)
-‐‑‒
読み込む時は
#include
“header.h”
-‐‑‒
extern
int
x;
//
外部変数
環境変数で指定されてる場合は、
#include
<stdio.h>
- 21. メモリの管理理
Score
*p,
*top;
if(
(p
=
(Score
*)malloc(sizeof(Score)
*
size))
==NULL){
/*
領領域確保エラー
*/
}
top
=
p;
//先頭を覚えておいて…
/*
pをほげほげ
*/
free(top);
//開放!
- 22. ⽂文字列列の配列列
-‐‑‒定義
char
*str[]
=
{“Hello”,
“Good-‐‑‒bye”,
“OK”};
-‐‑‒表⽰示
printf(“%s¥n”,
str[0]);
printf(“%s¥n”,
str[1]);
printf(“%s¥n”,
str[0]);
- 23. システムコール
カーネルの昨⽇日にアクセスする関数
(代表例例)
SIGINT
:
端末からのインタラプト⽂文字
SIGALRM
:
alarmシステムコール
SIGSEGV
:
不不正なメモリアクセス
signal(SIGINT,
func);
インタラプト⽂文字 func()
を呼び出し
が⼊入⼒力力されたら
- 24. fork()
実⾏行行中のプロセスを複製する
親
pid
=
fork();
fork()
if(
pid
!=
0){
//
親プロセス
}
else
{
//
⼦子プロセス ⼦子
}
- 25. wait()とexit()
⼦子の終了了を待つ wait()
pid
=
fork(); 親
if(
pid
!=
0){
//
親プロセス exit()
wait(&status);
//
⼦子の終了了を待つ
}
else
{ ⼦子
//
⼦子プロセス
exit(status);
//
終了了を明⽰示
}
- 26. exec(),
execvp()
他プログラムを実⾏行行
親
char
*argv[]
=
{“ls”,
“-‐‑‒a”,
NULL};
execvp(“ls”,
argv); execvp()
コマンドのパス コマンドライン
引数を渡す
親
- 28. プロセス間通信
-‐‑‒
パイプ
-‐‑‒
fd[0]
:
読み取り専⽤用
-‐‑‒
fd[1]
:
書き込み専⽤用
-‐‑‒
pipe(fd)
fd[0] fd[0]
親 パイプ ⼦子
fd[0] fd[1]
- 29. 親 パ ⼦子
プロセス間通信
-‐‑‒
パイプ
if(
pipe(fd)==
-‐‑‒1){
perror(“pipe”);
}
if(
(len=write(fd[1],
buf,
strlen(buf)+1))==NULL){
perror(“write”);
}
if(
(len=read(fd[0],
buf,
strlen(buf)))==NULL){
perror(“read”);
}
- 31. 親 FIFO 親
プロセス間通信
-‐‑‒
パイプ
if(
mkfifo(“myFifo”,
0666)
==
-‐‑‒1){
make perror(“mkfifo”);
}
if(
(fd=open(“myfifo”,
O_̲WRONLY))
==
-‐‑‒1){
open perror(“open”);
}
if(
write(fd,
buf,
sizeof(buf)))==-‐‑‒1){
write! perror(“write”);
}
- 32. 親 FIFO 親
プロセス間通信
-‐‑‒
パイプ
if(
(fd=open(“myfifo”,
O_̲RDONLY))
==
-‐‑‒1){
open perror(“open”);
}
if(
ret=
read(fd,
buf,
sizeof(buf)))==-‐‑‒1){
read! perror(“write”);
}