當前位置:首頁 » 操作系統 » linuxcsystem

linuxcsystem

發布時間: 2022-07-02 10:50:42

① 在虛擬機的linux下安裝SYSTEM C無法configure

謝謝你的回答!我用的虛擬機是VMWARE WORKSTATION 6.0其他也有人用這個虛擬機,我裝了紅旗linux後安裝SYSTEM C 每次運行到#../configure就報上面的錯誤,於是我又在虛擬機上裝了RED HAT 9.0,在RED HAT 9.0里安裝SYSTEM C 每次運行到#../configure還是報上面的錯誤。為了排除虛擬機的問題,我換了個虛擬機的漢化版裝,還是一樣報錯。真是搞不懂了。

② 如何在linux下使用systemc

1、./configure ;2、make ;3、 make install;SystemC也不例外。將下載的源碼解壓文件夾如:/home/user/DirA;user代表你的用戶名,DirA表示你創建的某個目錄;
1 cd /home/user/DirA
2
3 ./configure -prefix=INSTALL_DIR //用-prefix=指定要安裝到的目錄路徑,此路徑必須已經存在;
4
5 make
6
7 make install

基本就可以了,我是在虛擬機下的小紅帽,我的安裝遇到一些小的錯誤,主要是example沒有安裝進去,docs也沒有,但類庫都已經安裝好了;
執行 make check 檢查安裝是否成功,make check 成功就沒問題了,我的是成功狀態。
最後的安裝目錄如下:

2、VC6++/VS2010 SystemC使用
前面說過,SystemC實際上是一個C++類庫,因此,VC或者VS下使用SystemC就是外部庫的使用。
編譯:下載解壓後的systemc-version下有msvc60等目錄,下面有工程文件,直接可以打開編譯即可得到SystemC的庫。
新建工程;
庫添加:
1)項目右鍵-屬性-配置屬性-連接器-常規:添加附件庫目錄

2)項目右鍵-屬性-配置屬性-連接器-輸入:添加庫

3)項目右鍵-屬性-配置屬性-C/C++-常規:添加頭文件所在目錄

編寫sc_hello.cpp代碼如下並添加到工程:
1 // sc_helloworld.cpp : 定義控制台應用程序的入口點。
2 //
3
4 #include "systemc.h"
5 SC_MODULE(hello)
6 {
7 sc_in<bool> clock;
8 void run()
9 {
10 cout << "@"<<sc_simulation_time<<" hello world" <<endl;
11 }
12
13 SC_CTOR(hello)
14 {
15 SC_METHOD(run);
16 sensitive<<clock.pos();
17 }
18 };
19
20 int sc_main(int argc, char* argv[])
21 {
22 sc_clock clk("clock",20,SC_NS);
23 hello h("hello");
24 h.clock(clk);
25 sc_start(200,SC_NS);
26 system("pause");
27 return 0;
28 }

③ 如何在linux下的C里調用系統命令,等同輸入命令

system(執行shell 命令) 相關函數 fork,execve,waitpid,popen 表頭文件 #include<stdlib.h> 定義函數 int system(const char * string); 函數說明 system()會調用fork()產生子進程,由子進程來調用/bin/sh-c string來執行參數string字元串所代表的命令,此命令執行完後隨即返回原調用的進程。在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT和SIGQUIT 信號則會被忽略。 返回值 如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(NULL),則返回非零值。如果system()調用成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能為system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認執行成功。 附加說明 在編寫具有SUID/SGID許可權的程序時請勿使用system(),system()會繼承環境變數,通過環境變數可能會造成系統安全的問題。 範例 #include<stdlib.h> main() { system(「ls -al /etc/passwd /etc/shadow」); } 執行 -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd -r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow

④ Linux c語言用system()調用,帶參數

linux c system函數介紹:

system(執行shell 命令)
相關函數
fork,execve,waitpid,popen
表頭文件
#i nclude
定義函數
int system(const char * string);
函數說明
system()會調用fork()產生子進程,由子進程來調用/bin/sh-c string來執行參數string字元串所代表的命令,此命>令執行完後隨即返回原調用的進程。在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT和SIGQUIT 信號則會被忽略。
返回值
=-1:出現錯誤
=0:調用成功但是沒有出現子進程
>0:成功退出的子進程的id
如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(NULL),則返回非零值>。如果system()調用成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能為 system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認執行成功。
附加說明
在編寫具有SUID/SGID許可權的程序時請勿使用system(),system()會繼承環境變數,通過環境變數可能會造成系統安全的問題。
範例
#i nclude
main()
{
system("ls -al /etc/passwd /etc/shadow");
}
執行結果:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shado
例2:
char tmp[];
sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev);
system(tmp);
其中dev是/dev/sda1。

system函數的源碼

#include <syspes.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>

int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}

if((pid = fork())<0){
status = -1;
}
else if(pid = 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子進程正常執行則不會執行此語句
}
else
{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER)
{
status = -1;
break;
}
}
}

return status;
}

那麼如何獲得system的返回值呢??

char buf[10];
char * ps="ps -ef|grep -c root";
FILE *ptr;
int i;

if((ptr = popen(ps, "r")) != NULL)
{
fgets(buf, 10 , ptr);
i = atoi(buf);
pclose(ptr);
}

可以man下waitpid查看下如何檢查status的值
int ret = system("ls -al /etc/passwd /etc/shadow");
if(WIFSIGNALED(ret))
具體的這些宏查看man waitpid

⑤ Linux下的c編程:系統調用

標準的c函數庫是所有的編譯都要具有的函數庫,(實際上還是略有不同),但是這些基本上實現方法略有不同,但是結果和標準是一樣的。但是linux的系統調用,調用是linux的系統庫,比如說unistd.h下的fork這個是Linux下特有,你在vs上,就沒有這個庫,也沒有這個函數。同樣在vs上寫c,你可以引入頭文件比如windows.h,顯然這個庫是Linux不具有的。簡單說系統調用庫根據具體的操作系統環境不同而不同,而c標准庫,是所有支持c語言編譯器都有的。

⑥ linuxC中,一個主函數裡面,用system(」clear「)清屏,是不是只能清一次

執行一次清一次啦

⑦ Linux下gcc編譯器C語言中用system("colour 03");和printf("\a");為什麼顏色不變,也沒有鳴叫!謝謝

Linux的沒有讓終端變色的Shell指令。只有Windows命令提示符(cmd)才有color這個命令。
printf ("\a" )確實在Linux下沒有鳴叫。

⑧ Linux命令SYSTEM()啟動命令

system是一個使用簡單,設計復雜的程序。
它主要包含fork exec waitpid三個步驟。
下來我來還原樓主的錯誤:
程序A:
/* socksrv.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /* for struct sockaddr_in*/

#define BACKLOG 10
#define MYPORT 4000

int main()
{
char *addr;
int sockfd;
int new_fd;
struct sockaddr_in my_addr, their_addr;

int res;
int sin_size;

char *buf;
/* 取得套接字描述符*/
sockfd = socket(AF_INET, /* domain*/
SOCK_STREAM, /* type*/
0); /* protocol*/

if (sockfd == -1) {
perror("socket");
exit(1);
}

/* Init sockaddr_in */
my_addr.sin_family = AF_INET; /* 注意: 應使用主機位元組順序*/
my_addr.sin_port = htons(MYPORT); /* 注意: 應使用網路位元組順序*/
my_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* 使用自己的 IP 地址 */
bzero(&(my_addr.sin_zero), 8); /* 結構的其餘的部分須置 0*/

/* 指定一個套接字使用的地址及埠*/
res = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));
if (res == -1) {
perror("bind");
exit(1);
}

/* 監聽請求, 等待連接*/
res = listen(sockfd,
BACKLOG); /* 未經處理的連接請求隊列可容納的最大數目*/
if (res == -1) {
perror("listen");
exit(1);
}
system("./hello&");
/* 接受對方的連接請求, 建立連接,返回一個新的連接描述符.
* 而第一個套接字描述符仍在你的機器上原來的埠 listen()
*/
sin_size = sizeof(struct sockaddr_in);
new_fd = accept(sockfd, (void *)&their_addr, &sin_size);

buf = (char *)malloc(255);
if (buf == NULL) {
printf("malloc failed\n");
exit(1);
}

/* 接受對方發來的數據*/
res = recv(new_fd, buf, 255, 0);
if (res == -1) {
perror("recv()");
exit(1);
}

/* 關閉本次連接*/
close(new_fd);

/* 關閉系統監聽*/
close(sockfd);

printf("recv data:%s\n", buf);
free(buf);
return 0;
}
程序B:hello,在主程序中用system("./hello&)調用。
#include <stdlib.h>
int main(){
while(1){
sleep(1000);
}
return 0;
}
編譯後運行程序A。我們可以在其它終端窗口看到 ./A ./hello正在運行,netstat -a 看到,tcp 4000埠被 佔用。
我們用Ctrl+c中斷程序A模擬樓主的崩潰操作。
這時,再在其它終端窗口看看,./A沒有了。./hello還在運行。netstat -a看到。4000埠還在佔用。
這時再次運行./A,提示bind: Address already in use而退出。
情況就是這樣。
因為執行system時,系統會fork一個A的子進程,再去執行B.
當你的A崩潰以後,它的一個子進程實際上還在運行,它打開的埠,文件,等還在使用。
所以再次運行A時,由於自定的互斥機制而退出。
如:再次綁定埠時提示埠已在使用。
殺死B後,A的子進程結束,它的資源釋放,所以才能再次運行A。
我建議樓主使用exec系列函數來啟動B。

⑨ linux 下如何編寫c程序,獲得命令行結果


void executeShell(const char *shell){

FILE *stream;

char buf[1024];

memset( buf, '', sizeof(buf) );//初始化buf,以免後面寫如亂碼到文件中

stream = popen( shell , "r" ); //將命令的輸出 通過管道讀取(「r」參數)到FILE* stream

fread( buf, sizeof(char), sizeof(buf), stream); //將剛剛FILE* stream的數據流讀取到buf中

pclose( stream );

printf("%s ",buf);//列印輸出結果

}

⑩ Linux C中,如何知道system函數是否調用成功了

函數說明
system()會調用fork()產生子進程,由子進程來調用/bin/sh
-c
string來執行參數string字元串所代表的命令,此命令執行完後隨即返回原調用的進程。
返回值
=-1:
出現錯誤
=0:
調用成功但是沒有出現子進程
>0:
成功退出的子進程的id
如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。
若參數string為空指針(NULL),則返回非零值。
如果system()調用成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能為
system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno來確認執行成功。
檢查返回值:
int
ret
=
system("ls
-al
/etc/passwd
/etc/shadow");
if(WIFSIGNALED(ret))
......

熱點內容
安卓手機可以用的谷歌叫什麼 發布:2024-04-25 12:05:57 瀏覽:942
linux改變用戶所屬組 發布:2024-04-25 11:50:33 瀏覽:469
rsa加密演算法java代碼 發布:2024-04-25 11:40:07 瀏覽:883
如何改變拉桿箱上的初始密碼 發布:2024-04-25 11:17:23 瀏覽:799
內網掛代理虛擬機如何配置網卡 發布:2024-04-25 11:15:06 瀏覽:687
明日之後緩存怎麼清理 發布:2024-04-25 11:14:56 瀏覽:205
華為mate30怎麼退回安卓版 發布:2024-04-25 11:08:49 瀏覽:898
安卓新機使用前要注意什麼 發布:2024-04-25 11:03:46 瀏覽:811
藍鳥哪個配置有按摩 發布:2024-04-25 10:53:24 瀏覽:940
崩壞3要求什麼蘋果手機配置 發布:2024-04-25 10:36:59 瀏覽:142