經典 書籍上都有啊
steven 的書!
good luck
② Linux下C語言編程用的readdir()實例
第一:linux下不成認無返回值的main方法
第二:你這個若成功,也只能夠讀取/etc/rc.d目錄下的內容
#include<sys/types.h>
#include <stdio.h>
#include<dirent.h>
#include<unistd.h>
int main(int argc,char **argv)
{
DIR * dir;
struct dirent * ptr;
int i;
if(argc==1)
dir=opendir("./");
else
dir=opendir(argv[1]);
while((ptr=readdir(dir))!=NULL)
{
printf("d_name: %s\n",ptr->d_name);//需要更詳細的信息你可以修改該句
}
closedir(dir);
return 0;
}
③ linux下,編寫一個c語言程序實現...(詳細見正文)!急!200分懸賞!
參考ln -l命令的輸出結果,編寫了以下程序(即輸出結果和ls -l命令的輸出結果相似),通過命令行傳入要查看的目錄,如果沒有傳入參數,則顯出當前目錄:
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pwd.h>
#include <time.h>
char *getmod(mode_t mode,char *line) /*生成許可權描述字元串*/
{
memset(line,0,sizeof(char)*11);
strcat(line,S_ISDIR(mode)?"d":"-");
strcat(line,(mode&S_IRWXU)&S_IRUSR?"r":"-");
strcat(line,(mode&S_IRWXU)&S_IWUSR?"w":"-");
strcat(line,(mode&S_IRWXU)&S_IXUSR?"x":"-");
strcat(line,(mode&S_IRWXG)&S_IRGRP?"r":"-");
strcat(line,(mode&S_IRWXG)&S_IWGRP?"w":"-");
strcat(line,(mode&S_IRWXG)&S_IXGRP?"x":"-");
strcat(line,(mode&S_IRWXO)&S_IROTH?"r":"-");
strcat(line,(mode&S_IRWXO)&S_IWOTH?"w":"-");
strcat(line,(mode&S_IRWXO)&S_IXOTH?"x":"-");
return line;
}
char *directory(char *argv) /*從程序參數取出目錄*/
{
int i;
for (i=strlen(argv)-1;i;--i)
if (argv[i]=='/'){
argv[i+1]='\0';
break;
}
return argv;
}
int main(int argc,char *argv[])
{
DIR *dirp;
struct dirent *dirst;
struct stat finfo;
char *path,fname[512],mod[11],ctm[10];
struct passwd *user=NULL;
struct tm *ltm;
if (argc==1) path=directory(argv[0]);
else path=argv[1];
dirp=opendir(path);
if (!dirp)
{
fprintf(stderr,"ERROR\n");
exit(-1);
}
for (dirst=readdir(dirp);dirst;dirst=readdir(dirp))
{
strcpy(fname,path);
lstat(strcat(strcat(fname,"/"),dirst->d_name),&finfo);
user=getpwuid(finfo.st_uid);
printf("%s\t%10s\t",getmod(finfo.st_mode,mod),user->pw_name);
printf("%10d\t%9d\t",finfo.st_ino,finfo.st_size);
ltm=localtime(&finfo.st_mtime);
strftime(ctm,9,"%b",ltm);
printf("%5s",ctm);
strftime(ctm,9,"%d",ltm);
printf("%3s",ctm);
strftime(ctm,9,"%Y",ltm);
printf("%5s\t",ctm);
printf("%s\n",dirst->d_name);
}
closedir(dirp);
return 0;
}
④ linux c的程序
#include <stdio.h>
#include <time.h>
timer_t g_stTimer ;
#define TIMER (10 ) //10 sec
timer_t start_timer(int tv_sec, int tv_usec, int Again)
{
timer_t tId = 0;
struct sigevent tSigEvent = {0};
struct itimerspec tItimerSpec = {0};
tSigEvent.sigev_value.sival_ptr = pTimerSignalInfo;
tSigEvent.sigev_notify = SIGEV_SIGNAL;
tSigEvent.sigev_signo = SIGUSR1;
if(timer_create(CLOCK_REALTIME, &tSigEvent, &tId) < 0)
{
printf("start_timer timer_create failed, errno = %d.\r\n", errno);
return 0;
}
if(nTvSec == 0 && nTvUsec == 0)
{
tItimerSpec.it_value.tv_sec = 1;
}
else
{
tItimerSpec.it_value.tv_sec = nTvSec;
}
tItimerSpec.it_value.tv_nsec = nTvUsec * 1000;
if(nAgain == 1)
{
tItimerSpec.it_interval.tv_sec = tItimerSpec.it_value.tv_sec;
tItimerSpec.it_interval.tv_nsec = tItimerSpec.it_value.tv_nsec;
}
else
{
tItimerSpec.it_interval.tv_sec = 0;
tItimerSpec.it_interval.tv_nsec = 0;
}
if(timer_settime(tId, 0, &tItimerSpec, NULL) < 0)
{
timer_delete(tId);
printf("start timer timer_settime failed, errno = %d.\r\n", errno);
return 0;
}
return tId;
}
void read_control()
{
//read control process
}
int main()
{
struct sigaction stTimer;
memset(&stTimer, 0, sizeof(stTimer));
stTimer.sa_flags = 0;
sigemptyset(&stTimer.sa_mask);
stTimer.sa_handler = read_control();
sigaction(SIGUSR1, &stTimer, NULL);
g_stTimer = start_timer( TIMER, 0, 1);
while(1)
{
printf("waiting .....");
}
return 0;
}
⑤ 如何用GCC在linux下編譯C語言程序
在Linux下面,如果要編譯一個C語言源程序,我們要使用GNU的gcc編譯器,假設我們有下面一個非常簡單的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux
");
}
要編譯這個程序,我們只要在命令行下執行:
gcc -o hello hello.c
gcc 編譯器就會為我們生成一個hello的可執行文件.執行./hello就可以看到程
序的輸出結果了
⑥ Linux下寫一個c程序,創建一個子進程,利用execl系統調用,若成功則去執行ls-l命令。
#include <stdio.h>
#include <unistd.h>
int main()
{
int pid;
pid = fork();
if (pid < 0)
{
printf("Failed to fork!\n");
return 1;
}
if (pid > 0)
{
wait(NULL);
}
else
{
execlp("/bin/ls", "/bin/ls", "-l", NULL);
}
return 0;
}
⑦ c語言實例,linux線程同步的信號量方式 謝謝
這么高的懸賞,實例放後面。信號量(sem),如同進程一樣,線程也可以通過信號量來實現通信,雖然是輕量級的。信號量函數的名字都以"sem_"打頭。線程使用的基本信號量函數有四個。
信號量初始化。
intsem_init(sem_t*sem,intpshared,unsignedintvalue);
這是對由sem指定的信號量進行初始化,設置好它的共享選項(linux只支持為0,即表示它是當前進程的局部信號量),然後給它一個初始值VALUE。
等待信號量。給信號量減1,然後等待直到信號量的值大於0。
intsem_wait(sem_t*sem);
釋放信號量。信號量值加1。並通知其他等待線程。
intsem_post(sem_t*sem);
銷毀信號量。我們用完信號量後都它進行清理。歸還佔有的一切資源。
intsem_destroy(sem_t*sem);
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<semaphore.h>
#include<errno.h>
#definereturn_if_fail(p)if((p)==0){printf("[%s]:funcerror!/n",__func__);return;}
typedefstruct_PrivInfo
{
sem_ts1;
sem_ts2;
time_tend_time;
}PrivInfo;
staticvoidinfo_init(PrivInfo*thiz);
staticvoidinfo_destroy(PrivInfo*thiz);
staticvoid*pthread_func_1(PrivInfo*thiz);
staticvoid*pthread_func_2(PrivInfo*thiz);
intmain(intargc,char**argv)
{
pthread_tpt_1=0;
pthread_tpt_2=0;
intret=0;
PrivInfo*thiz=NULL;
thiz=(PrivInfo*)malloc(sizeof(PrivInfo));
if(thiz==NULL)
{
printf("[%s]:Failedtomallocpriv./n");
return-1;
}
info_init(thiz);
ret=pthread_create(&pt_1,NULL,(void*)pthread_func_1,thiz);
if(ret!=0)
{
perror("pthread_1_create:");
}
ret=pthread_create(&pt_2,NULL,(void*)pthread_func_2,thiz);
if(ret!=0)
{
perror("pthread_2_create:");
}
pthread_join(pt_1,NULL);
pthread_join(pt_2,NULL);
info_destroy(thiz);
return0;
}
staticvoidinfo_init(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
thiz->end_time=time(NULL)+10;
sem_init(&thiz->s1,0,1);
sem_init(&thiz->s2,0,0);
return;
}
staticvoidinfo_destroy(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
sem_destroy(&thiz->s1);
sem_destroy(&thiz->s2);
free(thiz);
thiz=NULL;
return;
}
staticvoid*pthread_func_1(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
while(time(NULL)<thiz->end_time)
{
sem_wait(&thiz->s2);
printf("pthread1:pthread1getthelock./n");
sem_post(&thiz->s1);
printf("pthread1:pthread1unlock/n");
sleep(1);
}
return;
}
staticvoid*pthread_func_2(PrivInfo*thiz)
{
return_if_fail(thiz!=NULL);
while(time(NULL)<thiz->end_time)
{
sem_wait(&thiz->s1);
printf("pthread2:pthread2gettheunlock./n");
sem_post(&thiz->s2);
printf("pthread2:pthread2unlock./n");
sleep(1);
}
return;
}
⑧ 在linux下設計一個c程序,謝謝啦~~~
#include<stdio.h>
//#include"luoyan2.c"
void main()
{
int m,n,x,y;
int gongyueshu(int m,int n);
int gongbeishu(int m,int n);
printf("請輸入兩個數:");
scanf("%d,%d",&m,&n);
x=gongyueshu(m,n);
y=gongbeishu(m,n);
printf("公約數是:%d\n",x);
printf("公倍數是:%d\n",y);
}
#include<stdio.h>
int gongyueshu(int m,int n)
{
int r;
if(n%m==0) r=m;
else if(m%n==0) r=n;
else r=1;
return(r);
}
int gongbeishu(int m,int n)
{
int p;
if(n%m==0) p=n;
else if(m%n==0) p=m;
else p=n*m;
return(p);
}