08
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
calendar_bottom
RSS | ATOM | ADMIN

badulog

日々の覚書と雑記
<< [linux] qmailログの時刻表示 - TAI64N形式 - | main | [bash] ヒアドキュメントで変数展開したくない >>
ENTRY TOP
スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | - | - | - |
ENTRY BOTTOM ENTRY TOP
[C] sem_nsemsフィールドを%dでprintfしたら警告
semid_ds構造体のsem_nsemsフィールドを%dでprintfしようとして
make LOMCHK=ON で警告をくらった。

JMみると
struct semid_ds {
struct ipc_perm sem_perm; /* 所有権と許可 */
time_t sem_otime; /* 最後の semop の時刻 */
time_t sem_ctime; /* 最後に変更が行われた時刻 */
unsigned short sem_nsems; /* 集合内のセマフォの数 */
};

らしい。
ためしに/usr/includeでgrepしてみると2つかかった。
(1) bits/sem.h
/* Data structure describing a set of semaphores. */
struct semid_ds
{
struct ipc_perm sem_perm; /* operation permission struct */
__time_t sem_otime; /* last semop() time */
unsigned long int __unused1;
__time_t sem_ctime; /* last time changed by semctl() */
unsigned long int __unused2;
unsigned long int sem_nsems; /* number of semaphores in set */
unsigned long int __unused3;
unsigned long int __unused4;
};

(2) linux/sem.h
/* Obsolete, used only for backwards compatibility and libc5 compiles */
struct semid_ds {
struct ipc_perm sem_perm; /* permissions .. see ipc.h */
__kernel_time_t sem_otime; /* last semop time */
__kernel_time_t sem_ctime; /* last change time */
struct sem *sem_base; /* ptr to first semaphore in array */
struct sem_queue *sem_pending; /* pending operations to be processed */
struct sem_queue **sem_pending_last; /* last pending operation */
struct sem_undo *undo; /* undo requests on this array */
unsigned short sem_nsems; /* no. of semaphores in array */
};

どうやらunsigned shortの方は古いglibcとのコンパチのためらしい。
ムムムと思って良くJM見ると
構造体 semid_ds 内の多くのフィールドは、 Linux 2.2 では short 型だったが、Linux 2.4 では long 型になった。この利点を生かすには、glibc-2.1.91 以降の環境下で再コンパイルすれば十分である。カーネルは新しい形式の呼び出しと古い形式の呼び出しを cmd 内の IPC_64 フラグで区別する。


と書いてあった。。
しかしprintfのlong long intとかのprintfフォーマットが良く分からない。


baduizm | C言語 | - | - | - |
ENTRY BOTTOM ENTRY TOP
スポンサーサイト
スポンサードリンク | - | - | - | - |
ENTRY BOTTOM